Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 44 additions & 4 deletions Src/IronPython.Modules/binascii.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// See the LICENSE file in the project root for more information.

using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
Expand All @@ -11,9 +12,8 @@
using IronPython.Runtime.Exceptions;
using IronPython.Runtime.Operations;
using IronPython.Runtime.Types;
using Microsoft.Scripting;

using Microsoft.Scripting.Runtime;
using Microsoft.Scripting.Utils;

[assembly: PythonModule("binascii", typeof(IronPython.Modules.PythonBinaryAscii))]
namespace IronPython.Modules {
Expand Down Expand Up @@ -295,8 +295,48 @@ public static object rlecode_hqx(object data) {
public static object b2a_hqx(object data) {
throw new NotImplementedException();
}
public static object crc_hqx(object data, object crc) {
throw new NotImplementedException();

private static ushort[] crctab_hqx = new ushort[] {
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0,
};

public static object crc_hqx([BytesConversion]IList<byte> data, int crc) {
crc = crc & 0xffff;
foreach (var b in data) {
crc = ((crc << 8) & 0xff00) ^ crctab_hqx[(crc >> 8) ^ b];
}
return crc;
}

[Documentation("crc32(string[, value]) -> string\n\nComputes a CRC (Cyclic Redundancy Check) checksum of string.")]
Expand Down
25 changes: 21 additions & 4 deletions Src/IronPython.Modules/re.cs
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ public class RE_Pattern : IWeakReferenceable {
internal ParsedRegex _pre;

internal RE_Pattern(CodeContext/*!*/ context, object pattern, int flags=0, bool compiled=false) {
_pre = PreParseRegex(context, ValidatePatternAsString(pattern));
_pre = PreParseRegex(context, ValidatePatternAsString(pattern), (flags & VERBOSE) != 0);
try {
flags |= OptionToFlags(_pre.Options);
RegexOptions opts = FlagsToOption(flags);
Expand Down Expand Up @@ -876,25 +876,36 @@ public ParsedRegex(string pattern) {
public RegexOptions Options = RegexOptions.CultureInvariant;
}

private static readonly char[] _preParsedChars = new[] { '(', '{', '[', ']' };
private static readonly char[] _endOfLineChars = new[] { '\r', '\n' };
private static readonly char[] _preParsedChars = new[] { '(', '{', '[', ']', '#' };
private const string _mangledNamedGroup = "___PyRegexNameMangled";

/// <summary>
/// Preparses a regular expression text returning a ParsedRegex class
/// that can be used for further regular expressions.
/// </summary>
private static ParsedRegex PreParseRegex(CodeContext/*!*/ context, string pattern) {
private static ParsedRegex PreParseRegex(CodeContext/*!*/ context, string pattern, bool verbose) {
ParsedRegex res = new ParsedRegex(pattern);

//string newPattern;
int cur = 0, nameIndex;
int curGroup = 0;
bool isCharList = false;
bool containsNamedGroup = false;
bool inComment = false;

int groupCount = 0;
var namedGroups = new Dictionary<string, int>();

for (; ; ) {
if (verbose && inComment) {
// read to end of line
inComment = false;
var idx = pattern.IndexOfAny(_endOfLineChars, cur);
if (idx < 0) break;
cur = idx;
}

nameIndex = pattern.IndexOfAny(_preParsedChars, cur);
if (nameIndex > 0 && pattern[nameIndex - 1] == '\\') {
int curIndex = nameIndex - 2;
Expand All @@ -906,7 +917,7 @@ private static ParsedRegex PreParseRegex(CodeContext/*!*/ context, string patter
// odd number of back slashes, this is an optional
// paren that we should ignore.
if ((backslashCount & 0x01) != 0) {
cur++;
cur = ++nameIndex;
continue;
}
}
Expand All @@ -930,6 +941,12 @@ private static ParsedRegex PreParseRegex(CodeContext/*!*/ context, string patter
nameIndex++;
isCharList = false;
break;
case '#':
if (verbose && !isCharList) {
inComment = true;
}
nameIndex++;
break;
case '(':
// make sure we're not dealing with [(]
if (!isCharList) {
Expand Down
35 changes: 6 additions & 29 deletions Src/IronPythonTest/Cases/AllCPythonCasesManifest.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ Ignore=false
Arguments="$(TEST_FILE)"
WorkingDirectory=$(TEST_FILE_DIR)
Redirect=false
Timeout=600000 ; 10 minute timeout

[AllCPython.test___all__]
Ignore=true
Expand Down Expand Up @@ -64,9 +65,6 @@ Ignore=true
[AllCPython.test_binhex]
Ignore=true

[AllCPython.test_bisect]
FullFrames=true

[AllCPython.test_bsddb3]
Ignore=true

Expand Down Expand Up @@ -190,7 +188,6 @@ Ignore=true
Ignore=true

[AllCPython.test_cookie]
FullFrames=true
Ignore=true

[AllCPython.test_copy]
Expand Down Expand Up @@ -221,18 +218,15 @@ Ignore=true
Ignore=true

[AllCPython.test_decimal]
FullFrames=true
Ignore=true

[AllCPython.test_defaultdict]
Ignore=true

[AllCPython.test_deque]
FullFrames=true
Ignore=true

[AllCPython.test_descrtut]
FullFrames=true
Ignore=true

[AllCPython.test_descr]
Expand All @@ -259,11 +253,7 @@ Ignore=true
[AllCPython.test_dl]
Ignore=true

[AllCPython.test_doctest2]
FullFrames=true

[AllCPython.test_doctest]
FullFrames=true
Ignore=true

[AllCPython.test_docxmlrpc]
Expand Down Expand Up @@ -292,7 +282,6 @@ Ignore=true
Ignore=true

[AllCPython.test_extcall]
FullFrames=true
Ignore=true

[AllCPython.test_fcntl]
Expand Down Expand Up @@ -369,9 +358,6 @@ Ignore=true
[AllCPython.test_getargs2]
Ignore=true

[AllCPython.test_getopt]
FullFrames=truet

[AllCPython.test_gettext]
IsolationLevel=ENGINE

Expand Down Expand Up @@ -431,7 +417,7 @@ IsolationLevel=ENGINE

[AllCPython.test_import_magic]
Ignore=true
Reason=IronPython doesn't implement get_magic
Reason=IronPython doesnt implement get_magic

[AllCPython.test_index]
Ignore=true
Expand All @@ -449,6 +435,10 @@ IsolationLevel=ENGINE
[AllCPython.test_ioctl]
Ignore=true

[AllCPython.test_isinstance]
IsolationLevel=ENGINE
MaxRecursion=100

[AllCPython.test_iterlen]
Ignore=true

Expand Down Expand Up @@ -594,11 +584,9 @@ Ignore=true
Ignore=true

[AllCPython.test_pickletools]
FullFrames=true
Ignore=true

[AllCPython.test_pickle]
FullFrames=true
Ignore=true

[AllCPython.test_pipes]
Expand Down Expand Up @@ -701,9 +689,6 @@ Ignore=true
[AllCPython.test_select]
Ignore=true

[AllCPython.test_sets]
FullFrames=true

[AllCPython.test_set]
Ignore=true

Expand Down Expand Up @@ -808,7 +793,6 @@ Ignore=true
Ignore=true

[AllCPython.test_syntax]
FullFrames=true
Ignore=true

[AllCPython.test_sys]
Expand Down Expand Up @@ -867,9 +851,6 @@ Ignore=true
[AllCPython.test_tk]
Ignore=true

[AllCPython.test_tokenize]
FullFrames=true

[AllCPython.test_tools]
Ignore=true

Expand Down Expand Up @@ -919,9 +900,6 @@ Ignore=true
Ignore=true
IsolationLevel=ENGINE

[AllCPython.test_unpack]
FullFrames=true

[AllCPython.test_urllib]
Ignore=true
Reason=Intermittent StackOverFlowException - https://github.com/IronLanguages/ironpython2/issues/40
Expand All @@ -930,7 +908,6 @@ Reason=Intermittent StackOverFlowException - https://github.com/IronLanguages/ir
Ignore=true

[AllCPython.test_urllib2net]
FullFrames=true
Ignore=true

[AllCPython.test_urllib2_localnet]
Expand Down
Loading