| Index: src/jsregexp.h
 | 
| diff --git a/src/jsregexp.h b/src/jsregexp.h
 | 
| index dfbb581ad650a82f7bd1f030aefdd4fafbd43963..300c0ef1386433427cdf311e28661df6e145efc9 100644
 | 
| --- a/src/jsregexp.h
 | 
| +++ b/src/jsregexp.h
 | 
| @@ -204,8 +204,8 @@ class RegExpImpl {
 | 
|    static void SetIrregexpMaxRegisterCount(FixedArray* re, int value);
 | 
|    static int IrregexpNumberOfCaptures(FixedArray* re);
 | 
|    static int IrregexpNumberOfRegisters(FixedArray* re);
 | 
| -  static ByteArray* IrregexpByteCode(FixedArray* re, bool is_ascii);
 | 
| -  static Code* IrregexpNativeCode(FixedArray* re, bool is_ascii);
 | 
| +  static ByteArray* IrregexpByteCode(FixedArray* re, bool is_one_byte);
 | 
| +  static Code* IrregexpNativeCode(FixedArray* re, bool is_one_byte);
 | 
|  
 | 
|    // Limit the space regexps take up on the heap.  In order to limit this we
 | 
|    // would like to keep track of the amount of regexp code on the heap.  This
 | 
| @@ -216,10 +216,11 @@ class RegExpImpl {
 | 
|    static const int kRegWxpCompiledLimit = 1 * MB;
 | 
|  
 | 
|   private:
 | 
| -  static bool CompileIrregexp(
 | 
| -      Handle<JSRegExp> re, Handle<String> sample_subject, bool is_ascii);
 | 
| -  static inline bool EnsureCompiledIrregexp(
 | 
| -      Handle<JSRegExp> re, Handle<String> sample_subject, bool is_ascii);
 | 
| +  static bool CompileIrregexp(Handle<JSRegExp> re,
 | 
| +                              Handle<String> sample_subject, bool is_one_byte);
 | 
| +  static inline bool EnsureCompiledIrregexp(Handle<JSRegExp> re,
 | 
| +                                            Handle<String> sample_subject,
 | 
| +                                            bool is_one_byte);
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -262,7 +263,7 @@ class CharacterRange {
 | 
|    bool is_valid() { return from_ <= to_; }
 | 
|    bool IsEverything(uc16 max) { return from_ == 0 && to_ >= max; }
 | 
|    bool IsSingleton() { return (from_ == to_); }
 | 
| -  void AddCaseEquivalents(ZoneList<CharacterRange>* ranges, bool is_ascii,
 | 
| +  void AddCaseEquivalents(ZoneList<CharacterRange>* ranges, bool is_one_byte,
 | 
|                            Zone* zone);
 | 
|    static void Split(ZoneList<CharacterRange>* base,
 | 
|                      Vector<const int> overlay,
 | 
| @@ -526,11 +527,11 @@ class QuickCheckDetails {
 | 
|          mask_(0),
 | 
|          value_(0),
 | 
|          cannot_match_(false) { }
 | 
| -  bool Rationalize(bool ascii);
 | 
| +  bool Rationalize(bool one_byte);
 | 
|    // Merge in the information from another branch of an alternation.
 | 
|    void Merge(QuickCheckDetails* other, int from_index);
 | 
|    // Advance the current position by some amount.
 | 
| -  void Advance(int by, bool ascii);
 | 
| +  void Advance(int by, bool one_byte);
 | 
|    void Clear();
 | 
|    bool cannot_match() { return cannot_match_; }
 | 
|    void set_cannot_match() { cannot_match_ = true; }
 | 
| @@ -624,11 +625,13 @@ class RegExpNode: public ZoneObject {
 | 
|      UNREACHABLE();
 | 
|    }
 | 
|  
 | 
| -  // If we know that the input is ASCII then there are some nodes that can
 | 
| +  // If we know that the input is one-byte then there are some nodes that can
 | 
|    // never match.  This method returns a node that can be substituted for
 | 
|    // itself, or NULL if the node can never match.
 | 
| -  virtual RegExpNode* FilterASCII(int depth, bool ignore_case) { return this; }
 | 
| -  // Helper for FilterASCII.
 | 
| +  virtual RegExpNode* FilterOneByte(int depth, bool ignore_case) {
 | 
| +    return this;
 | 
| +  }
 | 
| +  // Helper for FilterOneByte.
 | 
|    RegExpNode* replacement() {
 | 
|      DCHECK(info()->replacement_calculated);
 | 
|      return replacement_;
 | 
| @@ -722,7 +725,7 @@ class SeqRegExpNode: public RegExpNode {
 | 
|        : RegExpNode(on_success->zone()), on_success_(on_success) { }
 | 
|    RegExpNode* on_success() { return on_success_; }
 | 
|    void set_on_success(RegExpNode* node) { on_success_ = node; }
 | 
| -  virtual RegExpNode* FilterASCII(int depth, bool ignore_case);
 | 
| +  virtual RegExpNode* FilterOneByte(int depth, bool ignore_case);
 | 
|    virtual void FillInBMInfo(int offset,
 | 
|                              int budget,
 | 
|                              BoyerMooreLookahead* bm,
 | 
| @@ -843,7 +846,7 @@ class TextNode: public SeqRegExpNode {
 | 
|                                      int characters_filled_in,
 | 
|                                      bool not_at_start);
 | 
|    ZoneList<TextElement>* elements() { return elms_; }
 | 
| -  void MakeCaseIndependent(bool is_ascii);
 | 
| +  void MakeCaseIndependent(bool is_one_byte);
 | 
|    virtual int GreedyLoopTextLength();
 | 
|    virtual RegExpNode* GetSuccessorOfOmnivorousTextNode(
 | 
|        RegExpCompiler* compiler);
 | 
| @@ -852,11 +855,11 @@ class TextNode: public SeqRegExpNode {
 | 
|                              BoyerMooreLookahead* bm,
 | 
|                              bool not_at_start);
 | 
|    void CalculateOffsets();
 | 
| -  virtual RegExpNode* FilterASCII(int depth, bool ignore_case);
 | 
| +  virtual RegExpNode* FilterOneByte(int depth, bool ignore_case);
 | 
|  
 | 
|   private:
 | 
|    enum TextEmitPassType {
 | 
| -    NON_ASCII_MATCH,             // Check for characters that can't match.
 | 
| +    NON_LATIN1_MATCH,            // Check for characters that can't match.
 | 
|      SIMPLE_CHARACTER_MATCH,      // Case-dependent single character check.
 | 
|      NON_LETTER_CHARACTER_MATCH,  // Check characters that have no case equivs.
 | 
|      CASE_CHARACTER_MATCH,        // Case-independent single character check.
 | 
| @@ -1081,7 +1084,7 @@ class ChoiceNode: public RegExpNode {
 | 
|    virtual bool try_to_emit_quick_check_for_alternative(bool is_first) {
 | 
|      return true;
 | 
|    }
 | 
| -  virtual RegExpNode* FilterASCII(int depth, bool ignore_case);
 | 
| +  virtual RegExpNode* FilterOneByte(int depth, bool ignore_case);
 | 
|  
 | 
|   protected:
 | 
|    int GreedyLoopTextLengthForAlternative(GuardedAlternative* alternative);
 | 
| @@ -1155,7 +1158,7 @@ class NegativeLookaheadChoiceNode: public ChoiceNode {
 | 
|    virtual bool try_to_emit_quick_check_for_alternative(bool is_first) {
 | 
|      return !is_first;
 | 
|    }
 | 
| -  virtual RegExpNode* FilterASCII(int depth, bool ignore_case);
 | 
| +  virtual RegExpNode* FilterOneByte(int depth, bool ignore_case);
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -1183,7 +1186,7 @@ class LoopChoiceNode: public ChoiceNode {
 | 
|    RegExpNode* continue_node() { return continue_node_; }
 | 
|    bool body_can_be_zero_length() { return body_can_be_zero_length_; }
 | 
|    virtual void Accept(NodeVisitor* visitor);
 | 
| -  virtual RegExpNode* FilterASCII(int depth, bool ignore_case);
 | 
| +  virtual RegExpNode* FilterOneByte(int depth, bool ignore_case);
 | 
|  
 | 
|   private:
 | 
|    // AddAlternative is made private for loop nodes because alternatives
 | 
| @@ -1326,7 +1329,7 @@ class BoyerMooreLookahead : public ZoneObject {
 | 
|    // point.
 | 
|    int length_;
 | 
|    RegExpCompiler* compiler_;
 | 
| -  // 0x7f for ASCII, 0xffff for UTF-16.
 | 
| +  // 0xff for Latin1, 0xffff for UTF-16.
 | 
|    int max_char_;
 | 
|    ZoneList<BoyerMoorePositionInfo*>* bitmaps_;
 | 
|  
 | 
| @@ -1595,10 +1598,10 @@ FOR_EACH_NODE_TYPE(DECLARE_VISIT)
 | 
|  //   +-------+        +------------+
 | 
|  class Analysis: public NodeVisitor {
 | 
|   public:
 | 
| -  Analysis(bool ignore_case, bool is_ascii)
 | 
| +  Analysis(bool ignore_case, bool is_one_byte)
 | 
|        : ignore_case_(ignore_case),
 | 
| -        is_ascii_(is_ascii),
 | 
| -        error_message_(NULL) { }
 | 
| +        is_one_byte_(is_one_byte),
 | 
| +        error_message_(NULL) {}
 | 
|    void EnsureAnalyzed(RegExpNode* node);
 | 
|  
 | 
|  #define DECLARE_VISIT(Type)                                          \
 | 
| @@ -1618,7 +1621,7 @@ FOR_EACH_NODE_TYPE(DECLARE_VISIT)
 | 
|  
 | 
|   private:
 | 
|    bool ignore_case_;
 | 
| -  bool is_ascii_;
 | 
| +  bool is_one_byte_;
 | 
|    const char* error_message_;
 | 
|  
 | 
|    DISALLOW_IMPLICIT_CONSTRUCTORS(Analysis);
 | 
| @@ -1657,13 +1660,11 @@ class RegExpEngine: public AllStatic {
 | 
|      int num_registers;
 | 
|    };
 | 
|  
 | 
| -  static CompilationResult Compile(RegExpCompileData* input,
 | 
| -                                   bool ignore_case,
 | 
| -                                   bool global,
 | 
| -                                   bool multiline,
 | 
| +  static CompilationResult Compile(RegExpCompileData* input, bool ignore_case,
 | 
| +                                   bool global, bool multiline,
 | 
|                                     Handle<String> pattern,
 | 
|                                     Handle<String> sample_subject,
 | 
| -                                   bool is_ascii, Zone* zone);
 | 
| +                                   bool is_one_byte, Zone* zone);
 | 
|  
 | 
|    static void DotPrint(const char* label, RegExpNode* node, bool ignore_case);
 | 
|  };
 | 
| 
 |