[kaffe] CVS kaffe (guilhem): Fixes for java.text + a small cleanup for jthreads.

Kaffe CVS cvs-commits at kaffe.org
Sat May 29 10:14:02 PDT 2004


PatchSet 4793 
Date: 2004/05/29 17:01:16
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
Fixes for java.text + a small cleanup for jthreads.

        * kaffe/kaffevm/systems/unix-jthreads/signal.c
        (nullException): Check whether currentJThread exists.

        * kaffe/kaffevm/systems/unix-jthreads/jthread.c
        (currentJThread): Set to NULL.

        * libraries/javalib/java/text/RuleBasedCollator.java
        (CollationElement.CollationElement): Removed unused constructor.
        New argument for the other one.
        (subParseString): Mark the element as ignorable but do not erase
        them from the database.
        (compare): Take into account the ignore field for ignorable
        elements.
        (buildCollationVector): Use the ignore field now.

        * libraries/javalib/java/text/CollationElementIterator.java
        (setText): Keep ignorable characters.

Members: 
	ChangeLog:1.2362->1.2363 
	kaffe/kaffevm/systems/unix-jthreads/jthread.c:1.113->1.114 
	kaffe/kaffevm/systems/unix-jthreads/signal.c:1.17->1.18 
	libraries/javalib/java/text/CollationElementIterator.java:1.17->1.18 
	libraries/javalib/java/text/RuleBasedCollator.java:1.21->1.22 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.2362 kaffe/ChangeLog:1.2363
--- kaffe/ChangeLog:1.2362	Fri May 28 13:40:09 2004
+++ kaffe/ChangeLog	Sat May 29 17:01:16 2004
@@ -1,6 +1,26 @@
+2004-05-29  Guilhem Lavaux <guilhem at kaffe.org>
+
+	* kaffe/kaffevm/systems/unix-jthreads/signal.c
+	(nullException): Check whether currentJThread exists.
+
+	* kaffe/kaffevm/systems/unix-jthreads/jthread.c
+	(currentJThread): Set to NULL.
+
+	* libraries/javalib/java/text/RuleBasedCollator.java
+	(CollationElement.CollationElement): Removed unused constructor.
+	New argument for the other one.
+	(subParseString): Mark the element as ignorable but do not erase
+	them from the database.
+	(compare): Take into account the ignore field for ignorable
+	elements.
+	(buildCollationVector): Use the ignore field now.
+
+	* libraries/javalib/java/text/CollationElementIterator.java
+	(setText): Keep ignorable characters.
+	
 2004-05-27  Michael Franz  <developer.franz at verizon.net>
 
-	libraries/clib/awt/X/evt.c,
+	* libraries/clib/awt/X/evt.c,
 	libraries/clib/awt/X/toolkit.h,
 	libraries/clib/io/AudioPlayer.c,
 	libraries/clib/io/File.c,
Index: kaffe/kaffe/kaffevm/systems/unix-jthreads/jthread.c
diff -u kaffe/kaffe/kaffevm/systems/unix-jthreads/jthread.c:1.113 kaffe/kaffe/kaffevm/systems/unix-jthreads/jthread.c:1.114
--- kaffe/kaffe/kaffevm/systems/unix-jthreads/jthread.c:1.113	Thu Apr 22 16:28:16 2004
+++ kaffe/kaffe/kaffevm/systems/unix-jthreads/jthread.c	Sat May 29 17:01:18 2004
@@ -113,7 +113,7 @@
 static int  max_priority;		/* maximum supported priority */
 static int  min_priority;		/* minimum supported priority */
 
-jthread* currentJThread;
+jthread* currentJThread = NULL;
 
 /* Context switch related functions */
 #ifndef JTHREAD_CONTEXT_SAVE
Index: kaffe/kaffe/kaffevm/systems/unix-jthreads/signal.c
diff -u kaffe/kaffe/kaffevm/systems/unix-jthreads/signal.c:1.17 kaffe/kaffe/kaffevm/systems/unix-jthreads/signal.c:1.18
--- kaffe/kaffe/kaffevm/systems/unix-jthreads/signal.c:1.17	Sun May  9 14:20:12 2004
+++ kaffe/kaffe/kaffevm/systems/unix-jthreads/signal.c	Sat May 29 17:01:18 2004
@@ -97,9 +97,9 @@
 #if defined(STACK_POINTER)
 	stackptr = (void *)STACK_POINTER(GET_SIGNAL_CONTEXT_POINTER(ctx));
 #if defined(STACK_GROWS_UP)
-	if (stackptr >= currentJThread->stackEnd)
+	if (currentJThread != NULL && stackptr >= currentJThread->stackEnd)
 #else
-	if (stackptr <= currentJThread->stackBase)
+	if (currentJThread != NULL && stackptr <= currentJThread->stackBase)
 #endif
 	  stackOverflowHandler(EXCEPTIONFRAMEPTR);
 	else
Index: kaffe/libraries/javalib/java/text/CollationElementIterator.java
diff -u kaffe/libraries/javalib/java/text/CollationElementIterator.java:1.17 kaffe/libraries/javalib/java/text/CollationElementIterator.java:1.18
--- kaffe/libraries/javalib/java/text/CollationElementIterator.java:1.17	Sun May 16 16:45:15 2004
+++ kaffe/libraries/javalib/java/text/CollationElementIterator.java	Sat May 29 17:01:18 2004
@@ -357,11 +357,8 @@
 	    /* Third case: the simplest. We have got the prefix and it
 	     * has not to be expanded.
 	     */
-	    if (!prefix.ignore)
-	      {
-		v.add (prefix);
-		vi.add (new Integer(idx_idx));
-	      }
+	    v.add (prefix);
+	    vi.add (new Integer(idx_idx));
 	    idx += prefix.key.length();
 	    /* If the sequence is in an expansion, we must decrease the
 	     * counter.
Index: kaffe/libraries/javalib/java/text/RuleBasedCollator.java
diff -u kaffe/libraries/javalib/java/text/RuleBasedCollator.java:1.21 kaffe/libraries/javalib/java/text/RuleBasedCollator.java:1.22
--- kaffe/libraries/javalib/java/text/RuleBasedCollator.java:1.21	Thu May 13 19:18:21 2004
+++ kaffe/libraries/javalib/java/text/RuleBasedCollator.java	Sat May 29 17:01:18 2004
@@ -158,22 +158,16 @@
     String expansion;
 
     CollationElement(String key, int primary, short secondary, short tertiary,
-		     short equality, String expansion)
+		     short equality, String expansion, boolean ignore)
     {
       this.key = key;
       this.primary = primary;
       this.secondary = secondary;
       this.tertiary = tertiary;
       this.equality = equality;
-      this.ignore = false;
+      this.ignore = ignore;
       this.expansion = expansion;
     }
-    
-    CollationElement(String key)
-    {
-      this.key = key;
-      this.ignore = true;
-    }
 
     final int getValue()
     {
@@ -196,13 +190,13 @@
     static final int GREATERT = 2;
     static final int EQUAL = 3;
     static final int RESET = 4;
-    static final int IGNORE = 5;
-    static final int INVERSE_SECONDARY = 6;
+    static final int INVERSE_SECONDARY = 5;
     
     int comparisonType;
     String textElement;
     int hashText;
     int offset;
+    boolean ignore;
 
     String expansionOrdering;
   }
@@ -250,7 +244,7 @@
    */
   static final CollationElement SPECIAL_UNKNOWN_SEQ = 
     new CollationElement("", (short) 32767, (short) 0, (short) 0,
-			 (short) 0, null);
+			 (short) 0, null, false);
   
   /**
    * This method initializes a new instance of <code>RuleBasedCollator</code>
@@ -447,26 +441,16 @@
 	  throw new ParseException
 	    ("Modifier '!' is not yet supported by Classpath", i+base_offset);
 	case '<':
-	  ignoreChars = false;
 	  type = CollationSorter.GREATERP;
 	  break;
 	case ';':
-	  if (!ignoreChars)
-	    type = CollationSorter.GREATERS;
-	  else
-	    type = CollationSorter.IGNORE;
+	  type = CollationSorter.GREATERS;
 	  break;
 	case ',':
-	  if (!ignoreChars)
-	    type = CollationSorter.GREATERT;
-	  else
-	    type = CollationSorter.IGNORE;
+	  type = CollationSorter.GREATERT;
 	  break;
 	case '=':
-	  if (!ignoreChars)
-	    type = CollationSorter.EQUAL;
-	  else
-	    type = CollationSorter.IGNORE;
+	  type = CollationSorter.EQUAL;
 	  break;
 	case '\'':
 	  eatingChars = !eatingChars;
@@ -549,10 +533,14 @@
 
 	CollationSorter sorter = new CollationSorter();
 	
+	if (operator == CollationSorter.GREATERP)
+	  ignoreChars = false;
+
 	sorter.comparisonType = operator;
 	sorter.textElement = sb.toString();
 	sorter.hashText = sorter.textElement.hashCode();
 	sorter.offset = base_offset+rules.length();
+	sorter.ignore = ignoreChars;
 	sb.setLength(0);
 
 	v.add(sorter);
@@ -568,10 +556,14 @@
 	    || (sb.length() == 0 && !nextIsModifier && !eatingChars))
 	  throw new ParseException("text element empty at " + pos, pos);
 
+	if (operator == CollationSorter.GREATERP)
+	  ignoreChars = false;
+
 	sorter.comparisonType = operator;
 	sorter.textElement = sb.toString();
  	sorter.hashText = sorter.textElement.hashCode();
 	sorter.offset = base_offset+pos;
+	sorter.ignore = ignoreChars;
 	v.add(sorter);
       }
 
@@ -674,8 +666,6 @@
 	      last_tertiary_seq = tertiary_seq;
 	    equality_seq = 0;
 	    break;
-	  case CollationSorter.IGNORE:
-	    ignoreChar = true;
 	  case CollationSorter.EQUAL:
 	    equality_seq++;
 	    break;
@@ -687,18 +677,9 @@
 	      ("Invalid unknown state '" + elt.comparisonType + "'", elt.offset);
 	  }
 
-	CollationElement e;
-
-	if (!ignoreChar)
-	  {
-	    e = new CollationElement(elt.textElement, primary_seq,
-				     secondary_seq, tertiary_seq,
-				     equality_seq, elt.expansionOrdering);
-	  }
-	else
-	  e = new CollationElement(elt.textElement);
-
-	v.add(e);
+	v.add(new CollationElement(elt.textElement, primary_seq,
+				   secondary_seq, tertiary_seq,
+				   equality_seq, elt.expansionOrdering, elt.ignore));
       }
 
     this.inverseAccentComparison = inverseComparisons; 
@@ -741,17 +722,45 @@
   public int compare(String source, String target)
   {
     CollationElementIterator cs, ct;
+    CollationElement ord1block = null;
+    CollationElement ord2block = null;
+    boolean advance_block_1 = true;
+    boolean advance_block_2 = true;
 
     cs = getCollationElementIterator(source);
     ct = getCollationElementIterator(target);
 
     for(;;)
       {
-        CollationElement ord1block = cs.nextBlock(); 
-        CollationElement ord2block = ct.nextBlock(); 
 	int ord1;
 	int ord2;
 
+	/*
+	 * We have to check whether the characters are ignorable.
+	 * If it is the case then forget them. 
+	 */
+	if (advance_block_1)
+	  {
+	    ord1block = cs.nextBlock();
+	    if (ord1block != null && ord1block.ignore)
+	      continue;
+	  }
+	
+	if (advance_block_2)
+	  {
+	    ord2block = ct.nextBlock();
+	    if (ord2block != null && ord2block.ignore)
+	      {
+	        advance_block_1 = false;
+	        continue;
+	      }
+	 }
+	else
+	  advance_block_2 = true;
+
+	if (!advance_block_1)
+	  advance_block_1 = true;
+
 	if (ord1block != null)
 	  ord1 = ord1block.getValue();
 	else
@@ -781,12 +790,12 @@
 	
 	if (prim1 == 0 && getStrength() < TERTIARY)
 	  {
-	    ct.previousBlock();
+            advance_block_2 = false;
 	    continue;
 	  }
 	else if (prim2 == 0 && getStrength() < TERTIARY)
 	  {
-	    cs.previousBlock();
+	    advance_block_1 = false;
 	    continue;
 	  }
 
@@ -861,7 +870,7 @@
     else
       v = (short) c;
     return new CollationElement("" + c, last_primary_value + v,
-				(short) 0, (short) 0, (short) 0, null);
+				(short) 0, (short) 0, (short) 0, null, false);
   }
 
   /**
@@ -883,7 +892,7 @@
     else
       v = (short) c;
     return new CollationElement("" + c, (short) 0,
-				(short) 0, (short) (last_tertiary_value + v), (short) 0, null);
+				(short) 0, (short) (last_tertiary_value + v), (short) 0, null, false);
   }
 
   /**
@@ -945,6 +954,13 @@
 
     while (ord != CollationElementIterator.NULLORDER)
       {
+	// If the primary order is null, it means this is an ignorable
+	// character.
+	if (CollationElementIterator.primaryOrder(ord) == 0)
+	  {
+            ord = cei.next();
+	    continue;
+	  }
         switch (getStrength())
           {
             case PRIMARY:




More information about the kaffe mailing list