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:
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user