diff --git a/Foundation/CPDictionary.j b/Foundation/CPDictionary.j index c352c1afa..a628db87f 100755 --- a/Foundation/CPDictionary.j +++ b/Foundation/CPDictionary.j @@ -84,8 +84,9 @@ */ + (id)alloc { - if ([self class] !== CPDictionary && [self class] !== CPMutableDictionary) return [super alloc]; - return new CFMutableDictionary(); + var result = new CFMutableDictionary(); + if ([self class] !== CPDictionary && [self class] !== CPMutableDictionary) result.isa = [self class]; + return result; } /*! diff --git a/Foundation/CPString.j b/Foundation/CPString.j index 87831a567..82570d1a4 100644 --- a/Foundation/CPString.j +++ b/Foundation/CPString.j @@ -135,7 +135,7 @@ var CPStringRegexSpecialCharacters = [ */ - (id)initWithString:(CPString)aString { - return String(aString); + return CreateSubclassableString(aString, [self class]); } /*! @@ -796,6 +796,17 @@ var CPStringRegexSpecialCharacters = [ @end +var CreateSubclassableString = function(aString, aClass) +{ + if (aClass === CPString) return String(aString); + + var result = new String(aString); + + result.isa = aClass; + + return result; +}; + var diacritics = [[192,198],[224,230],[231,231],[232,235],[236,239],[242,246],[249,252]]; // Basic Latin ; Latin-1 Supplement. var normalized = [65,97,99,101,105,111,117];