Added UniqueTag.DOUBLE_MARK for better debug printouts in interpreter and potential support for serialization of Interpreter.CallFrame.

git-svn-id: svn://10.0.0.236/trunk@162356 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
igor%mir2.org
2004-09-15 13:42:26 +00:00
parent c912420e53
commit 73725fe78e

View File

@@ -38,47 +38,78 @@ package org.mozilla.javascript;
import java.io.Serializable;
/**
Class instances represent serializable tags to mark special values of Object references.
<p>
Compatibility note: under jdk 1.1 use org.mozilla.javascript.serialize.ScriptableInputStream to read serialized instances of UniqueTag as under this JDK version the default ObjectInputStream would not restore them correctly as it lacks support for readResolve method
*/
* Class instances represent serializable tags to mark special Object values.
* <p>
* Compatibility note: under jdk 1.1 use
* org.mozilla.javascript.serialize.ScriptableInputStream to read serialized
* instances of UniqueTag as under this JDK version the default
* ObjectInputStream would not restore them correctly as it lacks support
* for readResolve method
*/
public final class UniqueTag implements Serializable
{
private UniqueTag(int tagId) {
_tagId = tagId;
private static final int ID_NOT_FOUND = 1;
private static final int ID_NULL_VALUE = 2;
private static final int ID_DOUBLE_MARK = 3;
/**
* Tag to mark non-existing values.
*/
public static final UniqueTag
NOT_FOUND = new UniqueTag(ID_NOT_FOUND);
/**
* Tag to distinguish between uninitialized and null values.
*/
public static final UniqueTag
NULL_VALUE = new UniqueTag(ID_NULL_VALUE);
/**
* Tag to indicate that a object represents "double" with the real value
* stored somewhere else.
*/
public static final UniqueTag
DOUBLE_MARK = new UniqueTag(ID_DOUBLE_MARK);
private final int tagId;
private UniqueTag(int tagId)
{
this.tagId = tagId;
}
public Object readResolve() {
if (_tagId == ID_NOT_FOUND) { return NOT_FOUND; }
else if (_tagId == ID_NULL_VALUE) { return NULL_VALUE; }
Kit.codeBug();
return null;
public Object readResolve()
{
switch (tagId) {
case ID_NOT_FOUND:
return NOT_FOUND;
case ID_NULL_VALUE:
return NULL_VALUE;
case ID_DOUBLE_MARK:
return DOUBLE_MARK;
}
throw new IllegalStateException(String.valueOf(tagId));
}
// Overridden for better debug printouts
public String toString() {
public String toString()
{
String name;
if (_tagId == ID_NOT_FOUND) { name = "NOT_FOUND"; }
else if (_tagId == ID_NULL_VALUE) { name = "NULL_VALUE"; }
else { Kit.codeBug(); name = null; }
switch (tagId) {
case ID_NOT_FOUND:
name = "NOT_FOUND";
break;
case ID_NULL_VALUE:
name = "NULL_VALUE";
break;
case ID_DOUBLE_MARK:
name = "DOUBLE_MARK";
break;
default:
throw Kit.codeBug();
}
return super.toString()+": "+name;
}
private static final int ID_NOT_FOUND = 1;
private static final int ID_NULL_VALUE = 2;
private int _tagId;
/**
NOT_FOUND is useful to mark non-existing values.
*/
public static final UniqueTag NOT_FOUND = new UniqueTag(ID_NOT_FOUND);
/**
NULL_VALUE is useful to distinguish between uninitialized and null values
*/
public static final UniqueTag NULL_VALUE = new UniqueTag(ID_NULL_VALUE);
}