[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

darin darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 07:03:58 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 880105d6511458451f5d5361ce2d4db3a8a72ee9
Author: darin <darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Nov 19 22:02:26 2002 +0000

    JavaScriptCore:
    
    	- a first step towards atomic identifiers in JavaScript
    
    	Most places that work with identifiers now use Identifier
    	instead of UString.
    
            * kjs/identifier.cpp: Added.
            * kjs/identifier.h: Added.
            * JavaScriptCore.pbproj/project.pbxproj: Added files.
    
            * kjs/array_object.cpp:
            * kjs/array_object.h:
            * kjs/completion.cpp:
            * kjs/completion.h:
            * kjs/date_object.cpp:
            * kjs/date_object.h:
            * kjs/function.cpp:
            * kjs/function.h:
            * kjs/function_object.cpp:
            * kjs/grammar.cpp:
            * kjs/grammar.cpp.h:
            * kjs/grammar.h:
            * kjs/grammar.y:
            * kjs/internal.cpp:
            * kjs/internal.h:
            * kjs/lexer.cpp:
            * kjs/lookup.cpp:
            * kjs/lookup.h:
            * kjs/math_object.cpp:
            * kjs/math_object.h:
            * kjs/nodes.cpp:
            * kjs/nodes.h:
            * kjs/number_object.cpp:
            * kjs/number_object.h:
            * kjs/object.cpp:
            * kjs/object.h:
            * kjs/property_map.cpp:
            * kjs/property_map.h:
            * kjs/reference.cpp:
            * kjs/reference.h:
            * kjs/regexp_object.cpp:
            * kjs/regexp_object.h:
            * kjs/string_object.cpp:
            * kjs/string_object.h:
    
    WebCore:
    
    	- a first step towards atomic identifiers in JavaScript
    
    	Most places that work with identifiers now use Identifier
    	instead of UString.
    
            * khtml/ecma/kjs_binding.cpp:
            * khtml/ecma/kjs_binding.h:
            * khtml/ecma/kjs_css.cpp:
            * khtml/ecma/kjs_css.h:
            * khtml/ecma/kjs_dom.cpp:
            * khtml/ecma/kjs_dom.h:
            * khtml/ecma/kjs_events.cpp:
            * khtml/ecma/kjs_events.h:
            * khtml/ecma/kjs_html.cpp:
            * khtml/ecma/kjs_html.h:
            * khtml/ecma/kjs_navigator.cpp:
            * khtml/ecma/kjs_navigator.h:
            * khtml/ecma/kjs_range.cpp:
            * khtml/ecma/kjs_range.h:
            * khtml/ecma/kjs_traversal.cpp:
            * khtml/ecma/kjs_traversal.h:
            * khtml/ecma/kjs_views.cpp:
            * khtml/ecma/kjs_views.h:
            * khtml/ecma/kjs_window.cpp:
            * khtml/ecma/kjs_window.h:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2760 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index e9f2819..2f2ed14 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,5 +1,51 @@
 2002-11-19  Darin Adler  <darin at apple.com>
 
+	- a first step towards atomic identifiers in JavaScript
+
+	Most places that work with identifiers now use Identifier
+	instead of UString.
+
+        * kjs/identifier.cpp: Added.
+        * kjs/identifier.h: Added.
+        * JavaScriptCore.pbproj/project.pbxproj: Added files.
+
+        * kjs/array_object.cpp:
+        * kjs/array_object.h:
+        * kjs/completion.cpp:
+        * kjs/completion.h:
+        * kjs/date_object.cpp:
+        * kjs/date_object.h:
+        * kjs/function.cpp:
+        * kjs/function.h:
+        * kjs/function_object.cpp:
+        * kjs/grammar.cpp:
+        * kjs/grammar.cpp.h:
+        * kjs/grammar.h:
+        * kjs/grammar.y:
+        * kjs/internal.cpp:
+        * kjs/internal.h:
+        * kjs/lexer.cpp:
+        * kjs/lookup.cpp:
+        * kjs/lookup.h:
+        * kjs/math_object.cpp:
+        * kjs/math_object.h:
+        * kjs/nodes.cpp:
+        * kjs/nodes.h:
+        * kjs/number_object.cpp:
+        * kjs/number_object.h:
+        * kjs/object.cpp:
+        * kjs/object.h:
+        * kjs/property_map.cpp:
+        * kjs/property_map.h:
+        * kjs/reference.cpp:
+        * kjs/reference.h:
+        * kjs/regexp_object.cpp:
+        * kjs/regexp_object.h:
+        * kjs/string_object.cpp:
+        * kjs/string_object.h:
+
+2002-11-19  Darin Adler  <darin at apple.com>
+
 	- fix hash function and key comparison for the other kind of hash table; yields 3%
 
         * kjs/lookup.cpp:
diff --git a/JavaScriptCore/ChangeLog-2002-12-03 b/JavaScriptCore/ChangeLog-2002-12-03
index e9f2819..2f2ed14 100644
--- a/JavaScriptCore/ChangeLog-2002-12-03
+++ b/JavaScriptCore/ChangeLog-2002-12-03
@@ -1,5 +1,51 @@
 2002-11-19  Darin Adler  <darin at apple.com>
 
+	- a first step towards atomic identifiers in JavaScript
+
+	Most places that work with identifiers now use Identifier
+	instead of UString.
+
+        * kjs/identifier.cpp: Added.
+        * kjs/identifier.h: Added.
+        * JavaScriptCore.pbproj/project.pbxproj: Added files.
+
+        * kjs/array_object.cpp:
+        * kjs/array_object.h:
+        * kjs/completion.cpp:
+        * kjs/completion.h:
+        * kjs/date_object.cpp:
+        * kjs/date_object.h:
+        * kjs/function.cpp:
+        * kjs/function.h:
+        * kjs/function_object.cpp:
+        * kjs/grammar.cpp:
+        * kjs/grammar.cpp.h:
+        * kjs/grammar.h:
+        * kjs/grammar.y:
+        * kjs/internal.cpp:
+        * kjs/internal.h:
+        * kjs/lexer.cpp:
+        * kjs/lookup.cpp:
+        * kjs/lookup.h:
+        * kjs/math_object.cpp:
+        * kjs/math_object.h:
+        * kjs/nodes.cpp:
+        * kjs/nodes.h:
+        * kjs/number_object.cpp:
+        * kjs/number_object.h:
+        * kjs/object.cpp:
+        * kjs/object.h:
+        * kjs/property_map.cpp:
+        * kjs/property_map.h:
+        * kjs/reference.cpp:
+        * kjs/reference.h:
+        * kjs/regexp_object.cpp:
+        * kjs/regexp_object.h:
+        * kjs/string_object.cpp:
+        * kjs/string_object.h:
+
+2002-11-19  Darin Adler  <darin at apple.com>
+
 	- fix hash function and key comparison for the other kind of hash table; yields 3%
 
         * kjs/lookup.cpp:
diff --git a/JavaScriptCore/ChangeLog-2003-10-25 b/JavaScriptCore/ChangeLog-2003-10-25
index e9f2819..2f2ed14 100644
--- a/JavaScriptCore/ChangeLog-2003-10-25
+++ b/JavaScriptCore/ChangeLog-2003-10-25
@@ -1,5 +1,51 @@
 2002-11-19  Darin Adler  <darin at apple.com>
 
+	- a first step towards atomic identifiers in JavaScript
+
+	Most places that work with identifiers now use Identifier
+	instead of UString.
+
+        * kjs/identifier.cpp: Added.
+        * kjs/identifier.h: Added.
+        * JavaScriptCore.pbproj/project.pbxproj: Added files.
+
+        * kjs/array_object.cpp:
+        * kjs/array_object.h:
+        * kjs/completion.cpp:
+        * kjs/completion.h:
+        * kjs/date_object.cpp:
+        * kjs/date_object.h:
+        * kjs/function.cpp:
+        * kjs/function.h:
+        * kjs/function_object.cpp:
+        * kjs/grammar.cpp:
+        * kjs/grammar.cpp.h:
+        * kjs/grammar.h:
+        * kjs/grammar.y:
+        * kjs/internal.cpp:
+        * kjs/internal.h:
+        * kjs/lexer.cpp:
+        * kjs/lookup.cpp:
+        * kjs/lookup.h:
+        * kjs/math_object.cpp:
+        * kjs/math_object.h:
+        * kjs/nodes.cpp:
+        * kjs/nodes.h:
+        * kjs/number_object.cpp:
+        * kjs/number_object.h:
+        * kjs/object.cpp:
+        * kjs/object.h:
+        * kjs/property_map.cpp:
+        * kjs/property_map.h:
+        * kjs/reference.cpp:
+        * kjs/reference.h:
+        * kjs/regexp_object.cpp:
+        * kjs/regexp_object.h:
+        * kjs/string_object.cpp:
+        * kjs/string_object.h:
+
+2002-11-19  Darin Adler  <darin at apple.com>
+
 	- fix hash function and key comparison for the other kind of hash table; yields 3%
 
         * kjs/lookup.cpp:
diff --git a/JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj b/JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj
index 275820d..fe7ff81 100644
--- a/JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj
+++ b/JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj
@@ -222,6 +222,7 @@
 				F54F0801030CD22001B5C2EB,
 				F5341393030CEEB1018BE7F3,
 				F5BB2BC7030F772101FCFE1D,
+				933A349C038AE7C6008635CE,
 			);
 			isa = PBXHeadersBuildPhase;
 			runOnlyForDeploymentPostprocessing = 0;
@@ -267,6 +268,7 @@
 				F5341392030CEEB1018BE7F3,
 				F5341395030CF5F8018BE7F3,
 				F5BB2BC6030F772101FCFE1D,
+				933A349E038AE80F008635CE,
 			);
 			isa = PBXSourcesBuildPhase;
 			runOnlyForDeploymentPostprocessing = 0;
@@ -336,16 +338,12 @@
 				F692A85D0255597D01FF60F7,
 				F692A85E0255597D01FF60F7,
 				F692A85F0255597D01FF60F7,
-				F692A8C802555BA201FF60F7,
-				F692A8C902555BA201FF60F7,
-				F692A8CA02555BA201FF60F7,
+				933A349A038AE7C6008635CE,
+				933A349D038AE80F008635CE,
 				F692A8610255597D01FF60F7,
 				F692A8620255597D01FF60F7,
 				F692A8630255597D01FF60F7,
 				F692A8640255597D01FF60F7,
-				F692A8650255597D01FF60F7,
-				F692A8660255597D01FF60F7,
-				F692A8670255597D01FF60F7,
 				F692A8680255597D01FF60F7,
 				F692A8690255597D01FF60F7,
 				F692A86A0255597D01FF60F7,
@@ -432,6 +430,52 @@
 //102
 //103
 //104
+//930
+//931
+//932
+//933
+//934
+		933A3499038AE7C6008635CE = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			name = grammar.y;
+			path = kjs/grammar.y;
+			refType = 4;
+		};
+		933A349A038AE7C6008635CE = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			name = identifier.h;
+			path = kjs/identifier.h;
+			refType = 4;
+		};
+		933A349C038AE7C6008635CE = {
+			fileRef = 933A349A038AE7C6008635CE;
+			isa = PBXBuildFile;
+			settings = {
+				ATTRIBUTES = (
+					Private,
+				);
+			};
+		};
+		933A349D038AE80F008635CE = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			name = identifier.cpp;
+			path = kjs/identifier.cpp;
+			refType = 4;
+		};
+		933A349E038AE80F008635CE = {
+			fileRef = 933A349D038AE80F008635CE;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+//930
+//931
+//932
+//933
+//934
 //F50
 //F51
 //F52
@@ -575,6 +619,13 @@
 		F5C290E50284F960018635CA = {
 			children = (
 				F692A8540255597D01FF60F7,
+				F692A8C802555BA201FF60F7,
+				F692A8C902555BA201FF60F7,
+				F692A8CA02555BA201FF60F7,
+				933A3499038AE7C6008635CE,
+				F692A8650255597D01FF60F7,
+				F692A8660255597D01FF60F7,
+				F692A8670255597D01FF60F7,
 				F68EBB8C0255D4C601FF60F7,
 				F5C290E60284F98E018635CA,
 			);
diff --git a/JavaScriptCore/kjs/array_object.cpp b/JavaScriptCore/kjs/array_object.cpp
index fe2c2ea..1672ecc 100644
--- a/JavaScriptCore/kjs/array_object.cpp
+++ b/JavaScriptCore/kjs/array_object.cpp
@@ -65,7 +65,7 @@ ArrayInstanceImp::~ArrayInstanceImp()
   free(storage);
 }
 
-Value ArrayInstanceImp::get(ExecState *exec, const UString &propertyName) const
+Value ArrayInstanceImp::get(ExecState *exec, const Identifier &propertyName) const
 {
   if (propertyName == lengthPropertyName)
     return Number(length);
@@ -91,7 +91,7 @@ Value ArrayInstanceImp::get(ExecState *exec, unsigned index) const
 }
 
 // Special implementation of [[Put]] - see ECMA 15.4.5.1
-void ArrayInstanceImp::put(ExecState *exec, const UString &propertyName, const Value &value, int attr)
+void ArrayInstanceImp::put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr)
 {
   if (propertyName == lengthPropertyName) {
     setLength(value.toUInt32(exec));
@@ -117,7 +117,7 @@ void ArrayInstanceImp::put(ExecState *exec, unsigned index, const Value &value,
   storage[index] = value.imp();
 }
 
-bool ArrayInstanceImp::hasProperty(ExecState *exec, const UString &propertyName) const
+bool ArrayInstanceImp::hasProperty(ExecState *exec, const Identifier &propertyName) const
 {
   if (propertyName == lengthPropertyName)
     return true;
@@ -142,7 +142,7 @@ bool ArrayInstanceImp::hasProperty(ExecState *exec, unsigned index) const
   return v && v != UndefinedImp::staticUndefined;
 }
 
-bool ArrayInstanceImp::deleteProperty(ExecState *exec, const UString &propertyName)
+bool ArrayInstanceImp::deleteProperty(ExecState *exec, const Identifier &propertyName)
 {
   if (propertyName == lengthPropertyName)
     return false;
@@ -293,7 +293,7 @@ ArrayPrototypeImp::ArrayPrototypeImp(ExecState *exec,
   setInternalValue(Null());
 }
 
-Value ArrayPrototypeImp::get(ExecState *exec, const UString &propertyName) const
+Value ArrayPrototypeImp::get(ExecState *exec, const Identifier &propertyName) const
 {
   //fprintf( stderr, "ArrayPrototypeImp::get(%s)\n", propertyName.ascii() );
   return lookupGetFunction<ArrayProtoFuncImp, ArrayInstanceImp>( exec, propertyName, &arrayTable, this );
diff --git a/JavaScriptCore/kjs/array_object.h b/JavaScriptCore/kjs/array_object.h
index a255d6c..da8c215 100644
--- a/JavaScriptCore/kjs/array_object.h
+++ b/JavaScriptCore/kjs/array_object.h
@@ -33,13 +33,13 @@ namespace KJS {
     ArrayInstanceImp(const Object &proto, const List &initialValues);
     ~ArrayInstanceImp();
 
-    virtual Value get(ExecState *exec, const UString &propertyName) const;
+    virtual Value get(ExecState *exec, const Identifier &propertyName) const;
     virtual Value get(ExecState *exec, unsigned propertyName) const;
-    virtual void put(ExecState *exec, const UString &propertyName, const Value &value, int attr = None);
+    virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
     virtual void put(ExecState *exec, unsigned propertyName, const Value &value, int attr = None);
-    virtual bool hasProperty(ExecState *exec, const UString &propertyName) const;
+    virtual bool hasProperty(ExecState *exec, const Identifier &propertyName) const;
     virtual bool hasProperty(ExecState *exec, unsigned propertyName) const;
-    virtual bool deleteProperty(ExecState *exec, const UString &propertyName);
+    virtual bool deleteProperty(ExecState *exec, const Identifier &propertyName);
     virtual bool deleteProperty(ExecState *exec, unsigned propertyName);
 
     virtual void mark();
@@ -66,7 +66,7 @@ namespace KJS {
   public:
     ArrayPrototypeImp(ExecState *exec,
                       ObjectPrototypeImp *objProto);
-    Value get(ExecState *exec, const UString &p) const;
+    Value get(ExecState *exec, const Identifier &p) const;
     virtual const ClassInfo *classInfo() const { return &info; }
     static const ClassInfo info;
   };
diff --git a/JavaScriptCore/kjs/completion.cpp b/JavaScriptCore/kjs/completion.cpp
index 15fd4d0..c1a3ce8 100644
--- a/JavaScriptCore/kjs/completion.cpp
+++ b/JavaScriptCore/kjs/completion.cpp
@@ -28,7 +28,7 @@ using namespace KJS;
 
 // ------------------------------ Completion -----------------------------------
 
-Completion::Completion(ComplType c, const Value& v, const UString &t)
+Completion::Completion(ComplType c, const Value& v, const Identifier &t)
     : comp(c), val(v), tar(t)
 {
 }
diff --git a/JavaScriptCore/kjs/completion.h b/JavaScriptCore/kjs/completion.h
index fa591b9..36d1a50 100644
--- a/JavaScriptCore/kjs/completion.h
+++ b/JavaScriptCore/kjs/completion.h
@@ -25,6 +25,7 @@
 #ifndef _KJS_COMPLETION_H_
 #define _KJS_COMPLETION_H_
 
+#include "identifier.h"
 #include "value.h"
 
 namespace KJS {
@@ -47,16 +48,16 @@ namespace KJS {
   class Completion : private Value {
   public:
     Completion(ComplType c = Normal, const Value& v = Value(),
-               const UString &t = UString::null);
+               const Identifier &t = Identifier::null);
 
     ComplType complType() const { return comp; }
     Value value() const { return val; }
-    UString target() const { return tar; }
+    Identifier target() const { return tar; }
     bool isValueCompletion() const { return !val.isNull(); }
   private:
     ComplType comp;
     Value val;
-    UString tar;
+    Identifier tar;
   };
 
 }
diff --git a/JavaScriptCore/kjs/date_object.cpp b/JavaScriptCore/kjs/date_object.cpp
index 25423a4..2496e3f 100644
--- a/JavaScriptCore/kjs/date_object.cpp
+++ b/JavaScriptCore/kjs/date_object.cpp
@@ -278,7 +278,7 @@ DatePrototypeImp::DatePrototypeImp(ExecState *,
   // The constructor will be added later, after DateObjectImp has been built
 }
 
-Value DatePrototypeImp::get(ExecState *exec, const UString &propertyName) const
+Value DatePrototypeImp::get(ExecState *exec, const Identifier &propertyName) const
 {
   return lookupGetFunction<DateProtoFuncImp, ObjectImp>( exec, propertyName, &dateTable, this );
 }
diff --git a/JavaScriptCore/kjs/date_object.h b/JavaScriptCore/kjs/date_object.h
index b4a1307..14bdc32 100644
--- a/JavaScriptCore/kjs/date_object.h
+++ b/JavaScriptCore/kjs/date_object.h
@@ -46,7 +46,7 @@ namespace KJS {
   class DatePrototypeImp : public DateInstanceImp {
   public:
     DatePrototypeImp(ExecState *exec, ObjectPrototypeImp *objectProto);
-    Value get(ExecState *exec, const UString &p) const;
+    Value get(ExecState *exec, const Identifier &p) const;
     virtual const ClassInfo *classInfo() const { return &info; }
     static const ClassInfo info;
   };
diff --git a/JavaScriptCore/kjs/function.cpp b/JavaScriptCore/kjs/function.cpp
index 5b891f8..5363502 100644
--- a/JavaScriptCore/kjs/function.cpp
+++ b/JavaScriptCore/kjs/function.cpp
@@ -45,14 +45,14 @@ const ClassInfo FunctionImp::info = {"Function", &InternalFunctionImp::info, 0,
 namespace KJS {
   class Parameter {
   public:
-    Parameter(const UString &n) : name(n), next(0L) { }
+    Parameter(const Identifier &n) : name(n), next(0L) { }
     ~Parameter() { delete next; }
-    UString name;
+    Identifier name;
     Parameter *next;
   };
 };
 
-FunctionImp::FunctionImp(ExecState *exec, const UString &n)
+FunctionImp::FunctionImp(ExecState *exec, const Identifier &n)
   : InternalFunctionImp(
       static_cast<FunctionPrototypeImp*>(exec->interpreter()->builtinFunctionPrototype().imp())
       ), param(0L), ident(n)
@@ -157,7 +157,7 @@ Value FunctionImp::call(ExecState *exec, Object &thisObj, const List &args)
     return Undefined();
 }
 
-void FunctionImp::addParameter(const UString &n)
+void FunctionImp::addParameter(const Identifier &n)
 {
   Parameter **p = &param;
   while (*p)
@@ -225,7 +225,7 @@ void FunctionImp::processVarDecls(ExecState */*exec*/)
 // ### is "Function" correct here?
 const ClassInfo DeclaredFunctionImp::info = {"Function", &FunctionImp::info, 0, 0};
 
-DeclaredFunctionImp::DeclaredFunctionImp(ExecState *exec, const UString &n,
+DeclaredFunctionImp::DeclaredFunctionImp(ExecState *exec, const Identifier &n,
 					 FunctionBodyNode *b, const List &sc)
   : FunctionImp(exec,n), body(b)
 {
diff --git a/JavaScriptCore/kjs/function.h b/JavaScriptCore/kjs/function.h
index 15cf3c5..c7f67d6 100644
--- a/JavaScriptCore/kjs/function.h
+++ b/JavaScriptCore/kjs/function.h
@@ -36,7 +36,7 @@ namespace KJS {
     friend class Function;
     friend class ActivationImp;
   public:
-    FunctionImp(ExecState *exec, const UString &n = UString::null);
+    FunctionImp(ExecState *exec, const Identifier &n = Identifier::null);
     virtual ~FunctionImp();
 
     virtual void mark();
@@ -44,19 +44,19 @@ namespace KJS {
     virtual bool implementsCall() const;
     virtual Value call(ExecState *exec, Object &thisObj, const List &args);
 
-    void addParameter(const UString &n);
+    void addParameter(const Identifier &n);
     // parameters in string representation, e.g. (a, b, c)
     UString parameterString() const;
     virtual CodeType codeType() const = 0;
 
     virtual Completion execute(ExecState *exec) = 0;
-    UString name() const { return ident; }
+    Identifier name() const { return ident; }
 
     virtual const ClassInfo *classInfo() const { return &info; }
     static const ClassInfo info;
   protected:
     Parameter *param;
-    UString ident;
+    Identifier ident;
 
   private:
     void processParameters(ExecState *exec, const List &);
@@ -65,7 +65,7 @@ namespace KJS {
 
   class DeclaredFunctionImp : public FunctionImp {
   public:
-    DeclaredFunctionImp(ExecState *exec, const UString &n,
+    DeclaredFunctionImp(ExecState *exec, const Identifier &n,
 			FunctionBodyNode *b, const List &sc);
     ~DeclaredFunctionImp();
 
diff --git a/JavaScriptCore/kjs/function_object.cpp b/JavaScriptCore/kjs/function_object.cpp
index 828dafb..4f7c27b 100644
--- a/JavaScriptCore/kjs/function_object.cpp
+++ b/JavaScriptCore/kjs/function_object.cpp
@@ -235,7 +235,7 @@ Object FunctionObjectImp::construct(ExecState *exec, const List &args)
   scopeChain.append(exec->interpreter()->globalObject());
   FunctionBodyNode *bodyNode = progNode;
 
-  FunctionImp *fimp = new DeclaredFunctionImp(exec, UString::null, bodyNode,
+  FunctionImp *fimp = new DeclaredFunctionImp(exec, Identifier::null, bodyNode,
 					      scopeChain);
   Object ret(fimp); // protect from GC
 
diff --git a/JavaScriptCore/kjs/grammar.cpp b/JavaScriptCore/kjs/grammar.cpp
index a14219c..4d74305 100644
--- a/JavaScriptCore/kjs/grammar.cpp
+++ b/JavaScriptCore/kjs/grammar.cpp
@@ -128,6 +128,7 @@ typedef union {
   int                 ival;
   double              dval;
   UString             *ustr;
+  Identifier          *ident;
   Node                *node;
   StatementNode       *stat;
   ParameterNode       *param;
@@ -313,26 +314,26 @@ static const short yyrhs[] = {     3,
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   159,   161,   162,   163,   164,   165,   168,   174,   176,   178,
-   179,   180,   181,   182,   185,   187,   188,   191,   193,   197,
-   199,   202,   204,   207,   209,   213,   216,   217,   220,   222,
-   223,   224,   226,   229,   231,   234,   236,   237,   238,   242,
-   244,   247,   250,   256,   258,   261,   263,   264,   267,   269,
-   270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-   282,   284,   285,   286,   289,   291,   292,   295,   297,   298,
-   299,   302,   304,   306,   308,   310,   312,   314,   318,   320,
-   321,   322,   323,   326,   328,   331,   333,   336,   338,   341,
-   343,   347,   349,   353,   355,   359,   361,   365,   367,   368,
-   369,   370,   371,   372,   373,   374,   375,   376,   377,   380,
-   382,   385,   387,   388,   389,   390,   391,   392,   393,   394,
-   395,   396,   397,   398,   399,   402,   404,   407,   409,   412,
-   415,   424,   426,   430,   432,   435,   439,   443,   446,   453,
-   455,   459,   461,   462,   465,   468,   471,   475,   481,   483,
-   486,   488,   492,   494,   501,   503,   507,   509,   517,   519,
-   523,   524,   530,   535,   540,   542,   546,   548,   551,   553,
-   556,   558,   561,   563,   566,   572,   576,   578,   579,   582,
-   586,   590,   593,   597,   599,   604,   606,   610,   613,   617,
-   620,   624,   627,   633,   635
+   160,   162,   163,   164,   165,   166,   169,   175,   177,   179,
+   180,   181,   182,   183,   186,   188,   189,   192,   194,   198,
+   200,   203,   205,   208,   210,   214,   216,   217,   220,   222,
+   223,   224,   225,   228,   230,   233,   235,   236,   237,   241,
+   243,   246,   249,   255,   257,   260,   262,   263,   266,   268,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+   281,   283,   284,   285,   288,   290,   291,   294,   296,   297,
+   298,   301,   303,   305,   307,   309,   311,   313,   317,   319,
+   320,   321,   322,   325,   327,   330,   332,   335,   337,   340,
+   342,   346,   348,   352,   354,   358,   360,   364,   366,   367,
+   368,   369,   370,   371,   372,   373,   374,   375,   376,   379,
+   381,   384,   386,   387,   388,   389,   390,   391,   392,   393,
+   394,   395,   396,   397,   398,   401,   403,   406,   408,   411,
+   414,   423,   425,   429,   431,   434,   438,   442,   445,   452,
+   454,   458,   460,   461,   464,   467,   470,   474,   480,   482,
+   485,   487,   491,   493,   500,   502,   506,   508,   516,   518,
+   522,   523,   529,   534,   539,   541,   545,   547,   550,   552,
+   555,   557,   560,   562,   565,   571,   575,   577,   578,   581,
+   585,   589,   592,   596,   598,   603,   605,   609,   612,   616,
+   619,   623,   626,   632,   634
 };
 #endif
 
@@ -1289,106 +1290,105 @@ yyreduce:
   switch (yyn) {
 
 case 1:
-#line 160 "grammar.y"
+#line 161 "grammar.y"
 { yyval.node = new NullNode(); ;
     break;}
 case 2:
-#line 161 "grammar.y"
+#line 162 "grammar.y"
 { yyval.node = new BooleanNode(true); ;
     break;}
 case 3:
-#line 162 "grammar.y"
+#line 163 "grammar.y"
 { yyval.node = new BooleanNode(false); ;
     break;}
 case 4:
-#line 163 "grammar.y"
+#line 164 "grammar.y"
 { yyval.node = new NumberNode(yyvsp[0].dval); ;
     break;}
 case 5:
-#line 164 "grammar.y"
+#line 165 "grammar.y"
 { yyval.node = new StringNode(yyvsp[0].ustr); delete yyvsp[0].ustr; ;
     break;}
 case 6:
-#line 165 "grammar.y"
+#line 166 "grammar.y"
 { Lexer *l = Lexer::curr();
                                      if (!l->scanRegExp()) YYABORT;
                                      yyval.node = new RegExpNode(l->pattern,l->flags);;
     break;}
 case 7:
-#line 169 "grammar.y"
+#line 170 "grammar.y"
 { Lexer *l = Lexer::curr();
                                      if (!l->scanRegExp()) YYABORT;
                                      yyval.node = new RegExpNode(UString('=')+l->pattern,l->flags);;
     break;}
 case 8:
-#line 175 "grammar.y"
+#line 176 "grammar.y"
 { yyval.node = new ThisNode(); ;
     break;}
 case 9:
-#line 176 "grammar.y"
-{ yyval.node = new ResolveNode(yyvsp[0].ustr);
-                                     delete yyvsp[0].ustr; ;
+#line 177 "grammar.y"
+{ yyval.node = new ResolveNode(*yyvsp[0].ident);
+                                     delete yyvsp[0].ident; ;
     break;}
 case 12:
-#line 180 "grammar.y"
+#line 181 "grammar.y"
 { yyval.node = new GroupNode(yyvsp[-1].node); ;
     break;}
 case 13:
-#line 181 "grammar.y"
+#line 182 "grammar.y"
 { yyval.node = new ObjectLiteralNode(0L); ;
     break;}
 case 14:
-#line 182 "grammar.y"
+#line 183 "grammar.y"
 { yyval.node = new ObjectLiteralNode(yyvsp[-1].node); ;
     break;}
 case 15:
-#line 186 "grammar.y"
+#line 187 "grammar.y"
 { yyval.node = new ArrayNode(yyvsp[-1].eli); ;
     break;}
 case 16:
-#line 187 "grammar.y"
+#line 188 "grammar.y"
 { yyval.node = new ArrayNode(yyvsp[-1].elm); ;
     break;}
 case 17:
-#line 188 "grammar.y"
+#line 189 "grammar.y"
 { yyval.node = new ArrayNode(yyvsp[-1].eli, yyvsp[-3].elm); ;
     break;}
 case 18:
-#line 192 "grammar.y"
+#line 193 "grammar.y"
 { yyval.elm = new ElementNode(yyvsp[-1].eli, yyvsp[0].node); ;
     break;}
 case 19:
-#line 194 "grammar.y"
+#line 195 "grammar.y"
 { yyval.elm = new ElementNode(yyvsp[-3].elm, yyvsp[-1].eli, yyvsp[0].node); ;
     break;}
 case 20:
-#line 198 "grammar.y"
+#line 199 "grammar.y"
 { yyval.eli = 0L; ;
     break;}
 case 22:
-#line 203 "grammar.y"
+#line 204 "grammar.y"
 { yyval.eli = new ElisionNode(0L); ;
     break;}
 case 23:
-#line 204 "grammar.y"
+#line 205 "grammar.y"
 { yyval.eli = new ElisionNode(yyvsp[-1].eli); ;
     break;}
 case 24:
-#line 208 "grammar.y"
+#line 209 "grammar.y"
 { yyval.node = new PropertyValueNode(yyvsp[-2].node, yyvsp[0].node); ;
     break;}
 case 25:
-#line 210 "grammar.y"
+#line 211 "grammar.y"
 { yyval.node = new PropertyValueNode(yyvsp[-2].node, yyvsp[0].node, yyvsp[-4].node); ;
     break;}
 case 26:
-#line 214 "grammar.y"
-{ yyval.node = new PropertyNode(yyvsp[0].ustr);
-                                     delete yyvsp[0].ustr; ;
+#line 215 "grammar.y"
+{ yyval.node = new PropertyNode(*yyvsp[0].ident); delete yyvsp[0].ident; ;
     break;}
 case 27:
 #line 216 "grammar.y"
-{ yyval.node = new PropertyNode(yyvsp[0].ustr); delete yyvsp[0].ustr; ;
+{ yyval.node = new PropertyNode(Identifier(*yyvsp[0].ustr)); delete yyvsp[0].ustr; ;
     break;}
 case 28:
 #line 217 "grammar.y"
@@ -1400,277 +1400,276 @@ case 31:
     break;}
 case 32:
 #line 224 "grammar.y"
-{ yyval.node = new AccessorNode2(yyvsp[-2].node, yyvsp[0].ustr);
-                                     delete yyvsp[0].ustr; ;
+{ yyval.node = new AccessorNode2(yyvsp[-2].node, *yyvsp[0].ident); delete yyvsp[0].ident; ;
     break;}
 case 33:
-#line 226 "grammar.y"
+#line 225 "grammar.y"
 { yyval.node = new NewExprNode(yyvsp[-1].node, yyvsp[0].args); ;
     break;}
 case 35:
-#line 231 "grammar.y"
+#line 230 "grammar.y"
 { yyval.node = new NewExprNode(yyvsp[0].node); ;
     break;}
 case 36:
-#line 235 "grammar.y"
+#line 234 "grammar.y"
 { yyval.node = new FunctionCallNode(yyvsp[-1].node, yyvsp[0].args); ;
     break;}
 case 37:
-#line 236 "grammar.y"
+#line 235 "grammar.y"
 { yyval.node = new FunctionCallNode(yyvsp[-1].node, yyvsp[0].args); ;
     break;}
 case 38:
-#line 237 "grammar.y"
+#line 236 "grammar.y"
 { yyval.node = new AccessorNode1(yyvsp[-3].node, yyvsp[-1].node); ;
     break;}
 case 39:
-#line 238 "grammar.y"
-{ yyval.node = new AccessorNode2(yyvsp[-2].node, yyvsp[0].ustr);
-                                     delete yyvsp[0].ustr; ;
+#line 237 "grammar.y"
+{ yyval.node = new AccessorNode2(yyvsp[-2].node, *yyvsp[0].ident);
+                                     delete yyvsp[0].ident; ;
     break;}
 case 40:
-#line 243 "grammar.y"
+#line 242 "grammar.y"
 { yyval.args = new ArgumentsNode(0L); ;
     break;}
 case 41:
-#line 244 "grammar.y"
+#line 243 "grammar.y"
 { yyval.args = new ArgumentsNode(yyvsp[-1].alist); ;
     break;}
 case 42:
-#line 248 "grammar.y"
+#line 247 "grammar.y"
 { yyval.alist = new ArgumentListNode(yyvsp[0].node); ;
     break;}
 case 43:
-#line 250 "grammar.y"
+#line 249 "grammar.y"
 { yyval.alist = new ArgumentListNode(yyvsp[0].alist, yyvsp[-2].node); ;
     break;}
 case 47:
-#line 263 "grammar.y"
+#line 262 "grammar.y"
 { yyval.node = new PostfixNode(yyvsp[-1].node, OpPlusPlus); ;
     break;}
 case 48:
-#line 264 "grammar.y"
+#line 263 "grammar.y"
 { yyval.node = new PostfixNode(yyvsp[-1].node, OpMinusMinus); ;
     break;}
 case 50:
-#line 269 "grammar.y"
+#line 268 "grammar.y"
 { yyval.node = new DeleteNode(yyvsp[0].node); ;
     break;}
 case 51:
-#line 270 "grammar.y"
+#line 269 "grammar.y"
 { yyval.node = new VoidNode(yyvsp[0].node); ;
     break;}
 case 52:
-#line 271 "grammar.y"
+#line 270 "grammar.y"
 { yyval.node = new TypeOfNode(yyvsp[0].node); ;
     break;}
 case 53:
-#line 272 "grammar.y"
+#line 271 "grammar.y"
 { yyval.node = new PrefixNode(OpPlusPlus, yyvsp[0].node); ;
     break;}
 case 54:
-#line 273 "grammar.y"
+#line 272 "grammar.y"
 { yyval.node = new PrefixNode(OpPlusPlus, yyvsp[0].node); ;
     break;}
 case 55:
-#line 274 "grammar.y"
+#line 273 "grammar.y"
 { yyval.node = new PrefixNode(OpMinusMinus, yyvsp[0].node); ;
     break;}
 case 56:
-#line 275 "grammar.y"
+#line 274 "grammar.y"
 { yyval.node = new PrefixNode(OpMinusMinus, yyvsp[0].node); ;
     break;}
 case 57:
-#line 276 "grammar.y"
+#line 275 "grammar.y"
 { yyval.node = new UnaryPlusNode(yyvsp[0].node); ;
     break;}
 case 58:
-#line 277 "grammar.y"
+#line 276 "grammar.y"
 { yyval.node = new NegateNode(yyvsp[0].node); ;
     break;}
 case 59:
-#line 278 "grammar.y"
+#line 277 "grammar.y"
 { yyval.node = new BitwiseNotNode(yyvsp[0].node); ;
     break;}
 case 60:
-#line 279 "grammar.y"
+#line 278 "grammar.y"
 { yyval.node = new LogicalNotNode(yyvsp[0].node); ;
     break;}
 case 62:
-#line 284 "grammar.y"
+#line 283 "grammar.y"
 { yyval.node = new MultNode(yyvsp[-2].node, yyvsp[0].node, '*'); ;
     break;}
 case 63:
-#line 285 "grammar.y"
+#line 284 "grammar.y"
 { yyval.node = new MultNode(yyvsp[-2].node, yyvsp[0].node, '/'); ;
     break;}
 case 64:
-#line 286 "grammar.y"
+#line 285 "grammar.y"
 { yyval.node = new MultNode(yyvsp[-2].node,yyvsp[0].node,'%'); ;
     break;}
 case 66:
-#line 291 "grammar.y"
+#line 290 "grammar.y"
 { yyval.node = new AddNode(yyvsp[-2].node, yyvsp[0].node, '+'); ;
     break;}
 case 67:
-#line 292 "grammar.y"
+#line 291 "grammar.y"
 { yyval.node = new AddNode(yyvsp[-2].node, yyvsp[0].node, '-'); ;
     break;}
 case 69:
-#line 297 "grammar.y"
+#line 296 "grammar.y"
 { yyval.node = new ShiftNode(yyvsp[-2].node, OpLShift, yyvsp[0].node); ;
     break;}
 case 70:
-#line 298 "grammar.y"
+#line 297 "grammar.y"
 { yyval.node = new ShiftNode(yyvsp[-2].node, OpRShift, yyvsp[0].node); ;
     break;}
 case 71:
-#line 299 "grammar.y"
+#line 298 "grammar.y"
 { yyval.node = new ShiftNode(yyvsp[-2].node, OpURShift, yyvsp[0].node); ;
     break;}
 case 73:
-#line 305 "grammar.y"
+#line 304 "grammar.y"
 { yyval.node = new RelationalNode(yyvsp[-2].node, OpLess, yyvsp[0].node); ;
     break;}
 case 74:
-#line 307 "grammar.y"
+#line 306 "grammar.y"
 { yyval.node = new RelationalNode(yyvsp[-2].node, OpGreater, yyvsp[0].node); ;
     break;}
 case 75:
-#line 309 "grammar.y"
+#line 308 "grammar.y"
 { yyval.node = new RelationalNode(yyvsp[-2].node, OpLessEq, yyvsp[0].node); ;
     break;}
 case 76:
-#line 311 "grammar.y"
+#line 310 "grammar.y"
 { yyval.node = new RelationalNode(yyvsp[-2].node, OpGreaterEq, yyvsp[0].node); ;
     break;}
 case 77:
-#line 313 "grammar.y"
+#line 312 "grammar.y"
 { yyval.node = new RelationalNode(yyvsp[-2].node, OpInstanceOf, yyvsp[0].node); ;
     break;}
 case 78:
-#line 315 "grammar.y"
+#line 314 "grammar.y"
 { yyval.node = new RelationalNode(yyvsp[-2].node, OpIn, yyvsp[0].node); ;
     break;}
 case 80:
-#line 320 "grammar.y"
+#line 319 "grammar.y"
 { yyval.node = new EqualNode(yyvsp[-2].node, OpEqEq, yyvsp[0].node); ;
     break;}
 case 81:
-#line 321 "grammar.y"
+#line 320 "grammar.y"
 { yyval.node = new EqualNode(yyvsp[-2].node, OpNotEq, yyvsp[0].node); ;
     break;}
 case 82:
-#line 322 "grammar.y"
+#line 321 "grammar.y"
 { yyval.node = new EqualNode(yyvsp[-2].node, OpStrEq, yyvsp[0].node); ;
     break;}
 case 83:
-#line 323 "grammar.y"
+#line 322 "grammar.y"
 { yyval.node = new EqualNode(yyvsp[-2].node, OpStrNEq, yyvsp[0].node);;
     break;}
 case 85:
-#line 328 "grammar.y"
+#line 327 "grammar.y"
 { yyval.node = new BitOperNode(yyvsp[-2].node, OpBitAnd, yyvsp[0].node); ;
     break;}
 case 87:
-#line 333 "grammar.y"
+#line 332 "grammar.y"
 { yyval.node = new BitOperNode(yyvsp[-2].node, OpBitXOr, yyvsp[0].node); ;
     break;}
 case 89:
-#line 338 "grammar.y"
+#line 337 "grammar.y"
 { yyval.node = new BitOperNode(yyvsp[-2].node, OpBitOr, yyvsp[0].node); ;
     break;}
 case 91:
-#line 344 "grammar.y"
+#line 343 "grammar.y"
 { yyval.node = new BinaryLogicalNode(yyvsp[-2].node, OpAnd, yyvsp[0].node); ;
     break;}
 case 93:
-#line 350 "grammar.y"
+#line 349 "grammar.y"
 { yyval.node = new BinaryLogicalNode(yyvsp[-2].node, OpOr, yyvsp[0].node); ;
     break;}
 case 95:
-#line 356 "grammar.y"
+#line 355 "grammar.y"
 { yyval.node = new ConditionalNode(yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ;
     break;}
 case 97:
-#line 362 "grammar.y"
+#line 361 "grammar.y"
 { yyval.node = new AssignNode(yyvsp[-2].node, yyvsp[-1].op, yyvsp[0].node);;
     break;}
 case 98:
-#line 366 "grammar.y"
+#line 365 "grammar.y"
 { yyval.op = OpEqual; ;
     break;}
 case 99:
-#line 367 "grammar.y"
+#line 366 "grammar.y"
 { yyval.op = OpPlusEq; ;
     break;}
 case 100:
-#line 368 "grammar.y"
+#line 367 "grammar.y"
 { yyval.op = OpMinusEq; ;
     break;}
 case 101:
-#line 369 "grammar.y"
+#line 368 "grammar.y"
 { yyval.op = OpMultEq; ;
     break;}
 case 102:
-#line 370 "grammar.y"
+#line 369 "grammar.y"
 { yyval.op = OpDivEq; ;
     break;}
 case 103:
-#line 371 "grammar.y"
+#line 370 "grammar.y"
 { yyval.op = OpLShift; ;
     break;}
 case 104:
-#line 372 "grammar.y"
+#line 371 "grammar.y"
 { yyval.op = OpRShift; ;
     break;}
 case 105:
-#line 373 "grammar.y"
+#line 372 "grammar.y"
 { yyval.op = OpURShift; ;
     break;}
 case 106:
-#line 374 "grammar.y"
+#line 373 "grammar.y"
 { yyval.op = OpAndEq; ;
     break;}
 case 107:
-#line 375 "grammar.y"
+#line 374 "grammar.y"
 { yyval.op = OpXOrEq; ;
     break;}
 case 108:
-#line 376 "grammar.y"
+#line 375 "grammar.y"
 { yyval.op = OpOrEq; ;
     break;}
 case 109:
-#line 377 "grammar.y"
+#line 376 "grammar.y"
 { yyval.op = OpModEq; ;
     break;}
 case 111:
-#line 382 "grammar.y"
+#line 381 "grammar.y"
 { yyval.node = new CommaNode(yyvsp[-2].node, yyvsp[0].node); ;
     break;}
 case 126:
-#line 403 "grammar.y"
+#line 402 "grammar.y"
 { yyval.stat = new BlockNode(0L); DBG(yyval.stat, yylsp[0], yylsp[0]); ;
     break;}
 case 127:
-#line 404 "grammar.y"
+#line 403 "grammar.y"
 { yyval.stat = new BlockNode(yyvsp[-1].srcs); DBG(yyval.stat, yylsp[0], yylsp[0]); ;
     break;}
 case 128:
-#line 408 "grammar.y"
+#line 407 "grammar.y"
 { yyval.slist = new StatListNode(yyvsp[0].stat); ;
     break;}
 case 129:
-#line 409 "grammar.y"
+#line 408 "grammar.y"
 { yyval.slist = new StatListNode(yyvsp[-1].slist, yyvsp[0].stat); ;
     break;}
 case 130:
-#line 413 "grammar.y"
+#line 412 "grammar.y"
 { yyval.stat = new VarStatementNode(yyvsp[-1].vlist);
                                       DBG(yyval.stat, yylsp[-2], yylsp[0]); ;
     break;}
 case 131:
-#line 415 "grammar.y"
+#line 414 "grammar.y"
 { if (automatic()) {
                                           yyval.stat = new VarStatementNode(yyvsp[-1].vlist);
 					  DBG(yyval.stat, yylsp[-2], yylsp[-1]);
@@ -1680,36 +1679,36 @@ case 131:
                                       ;
     break;}
 case 132:
-#line 425 "grammar.y"
+#line 424 "grammar.y"
 { yyval.vlist = new VarDeclListNode(yyvsp[0].decl); ;
     break;}
 case 133:
-#line 427 "grammar.y"
+#line 426 "grammar.y"
 { yyval.vlist = new VarDeclListNode(yyvsp[-2].vlist, yyvsp[0].decl); ;
     break;}
 case 134:
-#line 431 "grammar.y"
-{ yyval.decl = new VarDeclNode(yyvsp[0].ustr, 0); delete yyvsp[0].ustr; ;
+#line 430 "grammar.y"
+{ yyval.decl = new VarDeclNode(*yyvsp[0].ident, 0); delete yyvsp[0].ident; ;
     break;}
 case 135:
-#line 432 "grammar.y"
-{ yyval.decl = new VarDeclNode(yyvsp[-1].ustr, yyvsp[0].init); delete yyvsp[-1].ustr; ;
+#line 431 "grammar.y"
+{ yyval.decl = new VarDeclNode(*yyvsp[-1].ident, yyvsp[0].init); delete yyvsp[-1].ident; ;
     break;}
 case 136:
-#line 436 "grammar.y"
+#line 435 "grammar.y"
 { yyval.init = new AssignExprNode(yyvsp[0].node); ;
     break;}
 case 137:
-#line 440 "grammar.y"
+#line 439 "grammar.y"
 { yyval.stat = new EmptyStatementNode(); ;
     break;}
 case 138:
-#line 444 "grammar.y"
+#line 443 "grammar.y"
 { yyval.stat = new ExprStatementNode(yyvsp[-1].node);
                                      DBG(yyval.stat, yylsp[-1], yylsp[0]); ;
     break;}
 case 139:
-#line 446 "grammar.y"
+#line 445 "grammar.y"
 { if (automatic()) {
                                        yyval.stat = new ExprStatementNode(yyvsp[-1].node);
 				       DBG(yyval.stat, yylsp[-1], yylsp[-1]);
@@ -1717,260 +1716,260 @@ case 139:
 				       YYABORT; ;
     break;}
 case 140:
-#line 454 "grammar.y"
+#line 453 "grammar.y"
 { yyval.stat = new IfNode(yyvsp[-2].node,yyvsp[0].stat,0L);DBG(yyval.stat,yylsp[-4],yylsp[-1]); ;
     break;}
 case 141:
-#line 456 "grammar.y"
+#line 455 "grammar.y"
 { yyval.stat = new IfNode(yyvsp[-4].node,yyvsp[-2].stat,yyvsp[0].stat);DBG(yyval.stat,yylsp[-6],yylsp[-3]); ;
     break;}
 case 142:
-#line 460 "grammar.y"
+#line 459 "grammar.y"
 { yyval.stat=new DoWhileNode(yyvsp[-4].stat,yyvsp[-1].node);DBG(yyval.stat,yylsp[-5],yylsp[-3]);;
     break;}
 case 143:
-#line 461 "grammar.y"
+#line 460 "grammar.y"
 { yyval.stat = new WhileNode(yyvsp[-2].node,yyvsp[0].stat);DBG(yyval.stat,yylsp[-4],yylsp[-1]); ;
     break;}
 case 144:
-#line 463 "grammar.y"
+#line 462 "grammar.y"
 { yyval.stat = new ForNode(yyvsp[-6].node,yyvsp[-4].node,yyvsp[-2].node,yyvsp[0].stat);
 	                             DBG(yyval.stat,yylsp[-8],yylsp[-1]); ;
     break;}
 case 145:
-#line 466 "grammar.y"
+#line 465 "grammar.y"
 { yyval.stat = new ForNode(yyvsp[-6].vlist,yyvsp[-4].node,yyvsp[-2].node,yyvsp[0].stat);
 	                             DBG(yyval.stat,yylsp[-9],yylsp[-1]); ;
     break;}
 case 146:
-#line 469 "grammar.y"
+#line 468 "grammar.y"
 { yyval.stat = new ForInNode(yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].stat);
 	                             DBG(yyval.stat,yylsp[-6],yylsp[-1]); ;
     break;}
 case 147:
-#line 472 "grammar.y"
-{ yyval.stat = new ForInNode(yyvsp[-4].ustr,0L,yyvsp[-2].node,yyvsp[0].stat);
+#line 471 "grammar.y"
+{ yyval.stat = new ForInNode(*yyvsp[-4].ident,0L,yyvsp[-2].node,yyvsp[0].stat);
 	                             DBG(yyval.stat,yylsp[-7],yylsp[-1]);
-                                     delete yyvsp[-4].ustr; ;
+                                     delete yyvsp[-4].ident; ;
     break;}
 case 148:
-#line 476 "grammar.y"
-{ yyval.stat = new ForInNode(yyvsp[-5].ustr,yyvsp[-4].init,yyvsp[-2].node,yyvsp[0].stat);
+#line 475 "grammar.y"
+{ yyval.stat = new ForInNode(*yyvsp[-5].ident,yyvsp[-4].init,yyvsp[-2].node,yyvsp[0].stat);
 	                             DBG(yyval.stat,yylsp[-8],yylsp[-1]);
-                                     delete yyvsp[-5].ustr; ;
+                                     delete yyvsp[-5].ident; ;
     break;}
 case 149:
-#line 482 "grammar.y"
+#line 481 "grammar.y"
 { yyval.node = 0L; ;
     break;}
 case 151:
-#line 487 "grammar.y"
+#line 486 "grammar.y"
 { yyval.stat = new ContinueNode(); DBG(yyval.stat,yylsp[-1],yylsp[0]); ;
     break;}
 case 152:
-#line 488 "grammar.y"
+#line 487 "grammar.y"
 { if (automatic()) {
                                        yyval.stat = new ContinueNode(); DBG(yyval.stat,yylsp[-1],yylsp[0]);
                                      } else
 				       YYABORT; ;
     break;}
 case 153:
-#line 492 "grammar.y"
-{ yyval.stat = new ContinueNode(yyvsp[-1].ustr); DBG(yyval.stat,yylsp[-2],yylsp[0]);
-                                     delete yyvsp[-1].ustr; ;
+#line 491 "grammar.y"
+{ yyval.stat = new ContinueNode(*yyvsp[-1].ident); DBG(yyval.stat,yylsp[-2],yylsp[0]);
+                                     delete yyvsp[-1].ident; ;
     break;}
 case 154:
-#line 494 "grammar.y"
+#line 493 "grammar.y"
 { if (automatic()) {
-                                       yyval.stat = new ContinueNode(yyvsp[-1].ustr);DBG(yyval.stat,yylsp[-2],yylsp[-1]);
-				       delete yyvsp[-1].ustr;
+                                       yyval.stat = new ContinueNode(*yyvsp[-1].ident);DBG(yyval.stat,yylsp[-2],yylsp[-1]);
+				       delete yyvsp[-1].ident;
                                      } else
 				       YYABORT; ;
     break;}
 case 155:
-#line 502 "grammar.y"
+#line 501 "grammar.y"
 { yyval.stat = new BreakNode();DBG(yyval.stat,yylsp[-1],yylsp[0]); ;
     break;}
 case 156:
-#line 503 "grammar.y"
+#line 502 "grammar.y"
 { if (automatic()) {
                                        yyval.stat = new BreakNode(); DBG(yyval.stat,yylsp[-1],yylsp[-1]);
                                      } else
 				       YYABORT; ;
     break;}
 case 157:
-#line 507 "grammar.y"
-{ yyval.stat = new BreakNode(yyvsp[-1].ustr); DBG(yyval.stat,yylsp[-2],yylsp[0]);
-                                     delete yyvsp[-1].ustr; ;
+#line 506 "grammar.y"
+{ yyval.stat = new BreakNode(*yyvsp[-1].ident); DBG(yyval.stat,yylsp[-2],yylsp[0]);
+                                     delete yyvsp[-1].ident; ;
     break;}
 case 158:
-#line 509 "grammar.y"
+#line 508 "grammar.y"
 { if (automatic()) {
-                                       yyval.stat = new BreakNode(yyvsp[-1].ustr); DBG(yyval.stat,yylsp[-2],yylsp[-1]);
-				       delete yyvsp[-1].ustr;
+                                       yyval.stat = new BreakNode(*yyvsp[-1].ident); DBG(yyval.stat,yylsp[-2],yylsp[-1]);
+				       delete yyvsp[-1].ident;
                                      } else
 				       YYABORT;
                                    ;
     break;}
 case 159:
-#line 518 "grammar.y"
+#line 517 "grammar.y"
 { yyval.stat = new ReturnNode(0L); DBG(yyval.stat,yylsp[-1],yylsp[0]); ;
     break;}
 case 160:
-#line 519 "grammar.y"
+#line 518 "grammar.y"
 { if (automatic()) {
                                        yyval.stat = new ReturnNode(0L); DBG(yyval.stat,yylsp[-1],yylsp[-1]);
                                      } else
 				       YYABORT; ;
     break;}
 case 161:
-#line 523 "grammar.y"
+#line 522 "grammar.y"
 { yyval.stat = new ReturnNode(yyvsp[-1].node); ;
     break;}
 case 162:
-#line 524 "grammar.y"
+#line 523 "grammar.y"
 { if (automatic())
                                        yyval.stat = new ReturnNode(yyvsp[-1].node);
                                      else
 				       YYABORT; ;
     break;}
 case 163:
-#line 531 "grammar.y"
+#line 530 "grammar.y"
 { yyval.stat = new WithNode(yyvsp[-2].node,yyvsp[0].stat);
                                      DBG(yyval.stat, yylsp[-4], yylsp[-1]); ;
     break;}
 case 164:
-#line 536 "grammar.y"
+#line 535 "grammar.y"
 { yyval.stat = new SwitchNode(yyvsp[-2].node, yyvsp[0].cblk);
                                      DBG(yyval.stat, yylsp[-4], yylsp[-1]); ;
     break;}
 case 165:
-#line 541 "grammar.y"
+#line 540 "grammar.y"
 { yyval.cblk = new CaseBlockNode(yyvsp[-1].clist, 0L, 0L); ;
     break;}
 case 166:
-#line 543 "grammar.y"
+#line 542 "grammar.y"
 { yyval.cblk = new CaseBlockNode(yyvsp[-3].clist, yyvsp[-2].ccl, yyvsp[-1].clist); ;
     break;}
 case 167:
-#line 547 "grammar.y"
+#line 546 "grammar.y"
 { yyval.clist = 0L; ;
     break;}
 case 169:
-#line 552 "grammar.y"
+#line 551 "grammar.y"
 { yyval.clist = new ClauseListNode(yyvsp[0].ccl); ;
     break;}
 case 170:
-#line 553 "grammar.y"
+#line 552 "grammar.y"
 { yyval.clist = yyvsp[-1].clist->append(yyvsp[0].ccl); ;
     break;}
 case 171:
-#line 557 "grammar.y"
+#line 556 "grammar.y"
 { yyval.ccl = new CaseClauseNode(yyvsp[-1].node, 0L); ;
     break;}
 case 172:
-#line 558 "grammar.y"
+#line 557 "grammar.y"
 { yyval.ccl = new CaseClauseNode(yyvsp[-2].node, yyvsp[0].slist); ;
     break;}
 case 173:
-#line 562 "grammar.y"
+#line 561 "grammar.y"
 { yyval.ccl = new CaseClauseNode(0L, 0L);; ;
     break;}
 case 174:
-#line 563 "grammar.y"
+#line 562 "grammar.y"
 { yyval.ccl = new CaseClauseNode(0L, yyvsp[0].slist); ;
     break;}
 case 175:
-#line 567 "grammar.y"
-{ yyvsp[0].stat->pushLabel(yyvsp[-2].ustr);
-                                     yyval.stat = new LabelNode(yyvsp[-2].ustr, yyvsp[0].stat);
-                                     delete yyvsp[-2].ustr; ;
+#line 566 "grammar.y"
+{ yyvsp[0].stat->pushLabel(*yyvsp[-2].ident);
+                                     yyval.stat = new LabelNode(*yyvsp[-2].ident, yyvsp[0].stat);
+                                     delete yyvsp[-2].ident; ;
     break;}
 case 176:
-#line 573 "grammar.y"
+#line 572 "grammar.y"
 { yyval.stat = new ThrowNode(yyvsp[-1].node); ;
     break;}
 case 177:
-#line 577 "grammar.y"
+#line 576 "grammar.y"
 { yyval.stat = new TryNode(yyvsp[-1].stat, yyvsp[0].node); ;
     break;}
 case 178:
-#line 578 "grammar.y"
+#line 577 "grammar.y"
 { yyval.stat = new TryNode(yyvsp[-1].stat, 0L, yyvsp[0].node); ;
     break;}
 case 179:
-#line 579 "grammar.y"
+#line 578 "grammar.y"
 { yyval.stat = new TryNode(yyvsp[-2].stat, yyvsp[-1].node, yyvsp[0].node); ;
     break;}
 case 180:
-#line 583 "grammar.y"
-{ yyval.node = new CatchNode(yyvsp[-2].ustr, yyvsp[0].stat); delete yyvsp[-2].ustr; ;
+#line 582 "grammar.y"
+{ yyval.node = new CatchNode(*yyvsp[-2].ident, yyvsp[0].stat); delete yyvsp[-2].ident; ;
     break;}
 case 181:
-#line 587 "grammar.y"
+#line 586 "grammar.y"
 { yyval.node = new FinallyNode(yyvsp[0].stat); ;
     break;}
 case 182:
-#line 591 "grammar.y"
-{ yyval.func = new FuncDeclNode(yyvsp[-3].ustr, 0L, yyvsp[0].body);
-                                             delete yyvsp[-3].ustr; ;
+#line 590 "grammar.y"
+{ yyval.func = new FuncDeclNode(*yyvsp[-3].ident, 0L, yyvsp[0].body);
+                                             delete yyvsp[-3].ident; ;
     break;}
 case 183:
-#line 594 "grammar.y"
-{ yyval.func = new FuncDeclNode(yyvsp[-4].ustr, yyvsp[-2].param, yyvsp[0].body);
-                                     delete yyvsp[-4].ustr; ;
+#line 593 "grammar.y"
+{ yyval.func = new FuncDeclNode(*yyvsp[-4].ident, yyvsp[-2].param, yyvsp[0].body);
+                                     delete yyvsp[-4].ident; ;
     break;}
 case 184:
-#line 598 "grammar.y"
+#line 597 "grammar.y"
 { yyval.node = new FuncExprNode(0L, yyvsp[0].body); ;
     break;}
 case 185:
-#line 600 "grammar.y"
+#line 599 "grammar.y"
 { yyval.node = new FuncExprNode(yyvsp[-2].param, yyvsp[0].body); ;
     break;}
 case 186:
-#line 605 "grammar.y"
-{ yyval.param = new ParameterNode(yyvsp[0].ustr); delete yyvsp[0].ustr; ;
+#line 604 "grammar.y"
+{ yyval.param = new ParameterNode(*yyvsp[0].ident); delete yyvsp[0].ident; ;
     break;}
 case 187:
-#line 606 "grammar.y"
-{ yyval.param = yyvsp[-2].param->append(yyvsp[0].ustr);
-	                             delete yyvsp[0].ustr; ;
+#line 605 "grammar.y"
+{ yyval.param = yyvsp[-2].param->append(*yyvsp[0].ident);
+	                             delete yyvsp[0].ident; ;
     break;}
 case 188:
-#line 611 "grammar.y"
+#line 610 "grammar.y"
 { yyval.body = new FunctionBodyNode(0L);
 	                             DBG(yyval.body, yylsp[-1], yylsp[0]);;
     break;}
 case 189:
-#line 613 "grammar.y"
+#line 612 "grammar.y"
 { yyval.body = new FunctionBodyNode(yyvsp[-1].srcs);
 	                             DBG(yyval.body, yylsp[-2], yylsp[0]);;
     break;}
 case 190:
-#line 618 "grammar.y"
+#line 617 "grammar.y"
 { yyval.prog = new ProgramNode(0L);
                                      Parser::progNode = yyval.prog; ;
     break;}
 case 191:
-#line 620 "grammar.y"
+#line 619 "grammar.y"
 { yyval.prog = new ProgramNode(yyvsp[0].srcs);
                                      Parser::progNode = yyval.prog; ;
     break;}
 case 192:
-#line 625 "grammar.y"
+#line 624 "grammar.y"
 { yyval.srcs = new SourceElementsNode(yyvsp[0].src); ;
     break;}
 case 193:
-#line 627 "grammar.y"
+#line 626 "grammar.y"
 { yyval.srcs = new SourceElementsNode(yyvsp[0].srcs, yyvsp[-1].src); ;
     break;}
 case 194:
-#line 634 "grammar.y"
+#line 633 "grammar.y"
 { yyval.src = new SourceElementNode(yyvsp[0].stat); ;
     break;}
 case 195:
-#line 635 "grammar.y"
+#line 634 "grammar.y"
 { yyval.src = new SourceElementNode(yyvsp[0].func); ;
     break;}
 }
@@ -2195,7 +2194,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 638 "grammar.y"
+#line 637 "grammar.y"
 
 
 int yyerror (const char *)  /* Called by yyparse on error */
diff --git a/JavaScriptCore/kjs/grammar.cpp.h b/JavaScriptCore/kjs/grammar.cpp.h
index ff02a0b..acea66b 100644
--- a/JavaScriptCore/kjs/grammar.cpp.h
+++ b/JavaScriptCore/kjs/grammar.cpp.h
@@ -2,6 +2,7 @@ typedef union {
   int                 ival;
   double              dval;
   UString             *ustr;
+  Identifier          *ident;
   Node                *node;
   StatementNode       *stat;
   ParameterNode       *param;
diff --git a/JavaScriptCore/kjs/grammar.h b/JavaScriptCore/kjs/grammar.h
index ff02a0b..acea66b 100644
--- a/JavaScriptCore/kjs/grammar.h
+++ b/JavaScriptCore/kjs/grammar.h
@@ -2,6 +2,7 @@ typedef union {
   int                 ival;
   double              dval;
   UString             *ustr;
+  Identifier          *ident;
   Node                *node;
   StatementNode       *stat;
   ParameterNode       *param;
diff --git a/JavaScriptCore/kjs/grammar.y b/JavaScriptCore/kjs/grammar.y
index 2899014..9aef96e 100644
--- a/JavaScriptCore/kjs/grammar.y
+++ b/JavaScriptCore/kjs/grammar.y
@@ -53,6 +53,7 @@ using namespace KJS;
   int                 ival;
   double              dval;
   UString             *ustr;
+  Identifier          *ident;
   Node                *node;
   StatementNode       *stat;
   ParameterNode       *param;
@@ -110,7 +111,7 @@ using namespace KJS;
 /* terminal types */
 %token <dval> NUMBER
 %token <ustr> STRING
-%token <ustr> IDENT
+%token <ident> IDENT
 
 /* automatically inserted semicolon */
 %token AUTOPLUSPLUS AUTOMINUSMINUS
@@ -173,7 +174,7 @@ Literal:
 
 PrimaryExpr:
     THIS                           { $$ = new ThisNode(); }
-  | IDENT                          { $$ = new ResolveNode($1);
+  | IDENT                          { $$ = new ResolveNode(*$1);
                                      delete $1; }
   | Literal
   | ArrayLiteral
@@ -211,9 +212,8 @@ PropertyNameAndValueList:
 ;
 
 PropertyName:
-    IDENT                          { $$ = new PropertyNode($1);
-                                     delete $1; }
-  | STRING                         { $$ = new PropertyNode($1); delete $1; }
+    IDENT                          { $$ = new PropertyNode(*$1); delete $1; }
+  | STRING                         { $$ = new PropertyNode(Identifier(*$1)); delete $1; }
   | NUMBER                         { $$ = new PropertyNode($1); }
 ;
 
@@ -221,8 +221,7 @@ MemberExpr:
     PrimaryExpr
   | FunctionExpr
   | MemberExpr '[' Expr ']'        { $$ = new AccessorNode1($1, $3); }
-  | MemberExpr '.' IDENT           { $$ = new AccessorNode2($1, $3);
-                                     delete $3; }
+  | MemberExpr '.' IDENT           { $$ = new AccessorNode2($1, *$3); delete $3; }
   | NEW MemberExpr Arguments       { $$ = new NewExprNode($2, $3); }
 ;
 
@@ -235,7 +234,7 @@ CallExpr:
     MemberExpr Arguments           { $$ = new FunctionCallNode($1, $2); }
   | CallExpr Arguments             { $$ = new FunctionCallNode($1, $2); }
   | CallExpr '[' Expr ']'          { $$ = new AccessorNode1($1, $3); }
-  | CallExpr '.' IDENT             { $$ = new AccessorNode2($1, $3);
+  | CallExpr '.' IDENT             { $$ = new AccessorNode2($1, *$3);
                                      delete $3; }
 ;
 
@@ -428,8 +427,8 @@ VariableDeclarationList:
 ;
 
 VariableDeclaration:
-    IDENT                          { $$ = new VarDeclNode($1, 0); delete $1; }
-  | IDENT Initializer              { $$ = new VarDeclNode($1, $2); delete $1; }
+    IDENT                          { $$ = new VarDeclNode(*$1, 0); delete $1; }
+  | IDENT Initializer              { $$ = new VarDeclNode(*$1, $2); delete $1; }
 ;
 
 Initializer:
@@ -469,11 +468,11 @@ IterationStatement:
             Statement              { $$ = new ForInNode($3, $5, $7);
 	                             DBG($$, at 1, at 6); }
   | FOR '(' VAR IDENT IN Expr ')'
-            Statement              { $$ = new ForInNode($4,0L,$6,$8);
+            Statement              { $$ = new ForInNode(*$4,0L,$6,$8);
 	                             DBG($$, at 1, at 7);
                                      delete $4; }
   | FOR '(' VAR IDENT Initializer IN Expr ')'
-            Statement              { $$ = new ForInNode($4,$5,$7,$9);
+            Statement              { $$ = new ForInNode(*$4,$5,$7,$9);
 	                             DBG($$, at 1, at 8);
                                      delete $4; }
 ;
@@ -489,10 +488,10 @@ ContinueStatement:
                                        $$ = new ContinueNode(); DBG($$, at 1, at 2);
                                      } else
 				       YYABORT; }
-  | CONTINUE IDENT ';'             { $$ = new ContinueNode($2); DBG($$, at 1, at 3);
+  | CONTINUE IDENT ';'             { $$ = new ContinueNode(*$2); DBG($$, at 1, at 3);
                                      delete $2; }
   | CONTINUE IDENT error           { if (automatic()) {
-                                       $$ = new ContinueNode($2);DBG($$, at 1, at 2);
+                                       $$ = new ContinueNode(*$2);DBG($$, at 1, at 2);
 				       delete $2;
                                      } else
 				       YYABORT; }
@@ -504,10 +503,10 @@ BreakStatement:
                                        $$ = new BreakNode(); DBG($$, at 1, at 1);
                                      } else
 				       YYABORT; }
-  | BREAK IDENT ';'                { $$ = new BreakNode($2); DBG($$, at 1, at 3);
+  | BREAK IDENT ';'                { $$ = new BreakNode(*$2); DBG($$, at 1, at 3);
                                      delete $2; }
   | BREAK IDENT error              { if (automatic()) {
-                                       $$ = new BreakNode($2); DBG($$, at 1, at 2);
+                                       $$ = new BreakNode(*$2); DBG($$, at 1, at 2);
 				       delete $2;
                                      } else
 				       YYABORT;
@@ -564,8 +563,8 @@ DefaultClause:
 ;
 
 LabelledStatement:
-    IDENT ':' Statement            { $3->pushLabel($1);
-                                     $$ = new LabelNode($1, $3);
+    IDENT ':' Statement            { $3->pushLabel(*$1);
+                                     $$ = new LabelNode(*$1, $3);
                                      delete $1; }
 ;
 
@@ -580,7 +579,7 @@ TryStatement:
 ;
 
 Catch:
-    CATCH '(' IDENT ')' Block      { $$ = new CatchNode($3, $5); delete $3; }
+    CATCH '(' IDENT ')' Block      { $$ = new CatchNode(*$3, $5); delete $3; }
 ;
 
 Finally:
@@ -588,10 +587,10 @@ Finally:
 ;
 
 FunctionDeclaration:
-    FUNCTION IDENT '(' ')' FunctionBody    { $$ = new FuncDeclNode($2, 0L, $5);
+    FUNCTION IDENT '(' ')' FunctionBody    { $$ = new FuncDeclNode(*$2, 0L, $5);
                                              delete $2; }
   | FUNCTION IDENT '(' FormalParameterList ')' FunctionBody
-                                   { $$ = new FuncDeclNode($2, $4, $6);
+                                   { $$ = new FuncDeclNode(*$2, $4, $6);
                                      delete $2; }
 
 FunctionExpr:
@@ -602,8 +601,8 @@ FunctionExpr:
 ;
 
 FormalParameterList:
-    IDENT                          { $$ = new ParameterNode($1); delete $1; }
-  | FormalParameterList ',' IDENT  { $$ = $1->append($3);
+    IDENT                          { $$ = new ParameterNode(*$1); delete $1; }
+  | FormalParameterList ',' IDENT  { $$ = $1->append(*$3);
 	                             delete $3; }
 ;
 
diff --git a/JavaScriptCore/kjs/completion.cpp b/JavaScriptCore/kjs/identifier.cpp
similarity index 70%
copy from JavaScriptCore/kjs/completion.cpp
copy to JavaScriptCore/kjs/identifier.cpp
index 15fd4d0..96c0379 100644
--- a/JavaScriptCore/kjs/completion.cpp
+++ b/JavaScriptCore/kjs/identifier.cpp
@@ -1,8 +1,5 @@
-// -*- c-basic-offset: 2 -*-
 /*
  *  This file is part of the KDE libraries
- *  Copyright (C) 1999-2001 Harri Porten (porten at kde.org)
- *  Copyright (C) 2001 Peter Kelly (pmk at post.com)
  *  Copyright (C) 2002 Apple Computer, Inc
  *
  *  This library is free software; you can redistribute it and/or
@@ -22,13 +19,5 @@
  *
  */
 
-#include "completion.h"
+#include "identifier.h"
 
-using namespace KJS;
-
-// ------------------------------ Completion -----------------------------------
-
-Completion::Completion(ComplType c, const Value& v, const UString &t)
-    : comp(c), val(v), tar(t)
-{
-}
diff --git a/JavaScriptCore/kjs/completion.cpp b/JavaScriptCore/kjs/identifier.h
similarity index 70%
copy from JavaScriptCore/kjs/completion.cpp
copy to JavaScriptCore/kjs/identifier.h
index 15fd4d0..ef606b0 100644
--- a/JavaScriptCore/kjs/completion.cpp
+++ b/JavaScriptCore/kjs/identifier.h
@@ -1,8 +1,5 @@
-// -*- c-basic-offset: 2 -*-
 /*
  *  This file is part of the KDE libraries
- *  Copyright (C) 1999-2001 Harri Porten (porten at kde.org)
- *  Copyright (C) 2001 Peter Kelly (pmk at post.com)
  *  Copyright (C) 2002 Apple Computer, Inc
  *
  *  This library is free software; you can redistribute it and/or
@@ -22,13 +19,20 @@
  *
  */
 
-#include "completion.h"
+#ifndef KJS_IDENTIFIER_H
+#define KJS_IDENTIFIER_H
 
-using namespace KJS;
+#include "ustring.h"
 
-// ------------------------------ Completion -----------------------------------
+namespace KJS {
+
+  class Identifier : public UString {
+  public:
+    Identifier() { }
+    Identifier(const char *s) : UString(s) { }
+    Identifier(const UString &s) : UString(s) { }
+  };
 
-Completion::Completion(ComplType c, const Value& v, const UString &t)
-    : comp(c), val(v), tar(t)
-{
 }
+
+#endif
diff --git a/JavaScriptCore/kjs/internal.cpp b/JavaScriptCore/kjs/internal.cpp
index 521b523..7daa191 100644
--- a/JavaScriptCore/kjs/internal.cpp
+++ b/JavaScriptCore/kjs/internal.cpp
@@ -282,7 +282,7 @@ LabelStack &LabelStack::operator=(const LabelStack &other)
   return *this;
 }
 
-bool LabelStack::push(const UString &id)
+bool LabelStack::push(const Identifier &id)
 {
   if (id.isEmpty() || contains(id))
     return false;
@@ -294,7 +294,7 @@ bool LabelStack::push(const UString &id)
   return true;
 }
 
-bool LabelStack::contains(const UString &id) const
+bool LabelStack::contains(const Identifier &id) const
 {
   if (id.isEmpty())
     return true;
diff --git a/JavaScriptCore/kjs/internal.h b/JavaScriptCore/kjs/internal.h
index f286cfd..79281f5 100644
--- a/JavaScriptCore/kjs/internal.h
+++ b/JavaScriptCore/kjs/internal.h
@@ -153,18 +153,18 @@ namespace KJS {
      * If id is not empty and is not in the stack already, puts it on top of
      * the stack and returns true, otherwise returns false
      */
-    bool push(const UString &id);
+    bool push(const Identifier &id);
     /**
      * Is the id in the stack?
      */
-    bool contains(const UString &id) const;
+    bool contains(const Identifier &id) const;
     /**
      * Removes from the stack the last pushed id (what else?)
      */
     void pop();
   private:
     struct StackElem {
-      UString id;
+      Identifier id;
       StackElem *prev;
     };
 
diff --git a/JavaScriptCore/kjs/lexer.cpp b/JavaScriptCore/kjs/lexer.cpp
index 687fb57..47d76b3 100644
--- a/JavaScriptCore/kjs/lexer.cpp
+++ b/JavaScriptCore/kjs/lexer.cpp
@@ -36,7 +36,7 @@
 #include "interpreter.h"
 #include "nodes.h"
 #include "lexer.h"
-#include "ustring.h"
+#include "identifier.h"
 #include "lookup.h"
 #include "internal.h"
 
diff --git a/JavaScriptCore/kjs/lookup.cpp b/JavaScriptCore/kjs/lookup.cpp
index f5567c0..81b1a60 100644
--- a/JavaScriptCore/kjs/lookup.cpp
+++ b/JavaScriptCore/kjs/lookup.cpp
@@ -67,7 +67,7 @@ const HashEntry* Lookup::findEntry( const struct HashTable *table,
 }
 
 const HashEntry* Lookup::findEntry( const struct HashTable *table,
-                                const UString &s )
+                                const Identifier &s )
 {
   return findEntry( table, s.data(), s.size() );
 }
@@ -81,7 +81,7 @@ int Lookup::find(const struct HashTable *table,
   return -1;
 }
 
-int Lookup::find(const struct HashTable *table, const UString &s)
+int Lookup::find(const struct HashTable *table, const Identifier &s)
 {
   return find(table, s.data(), s.size());
 }
@@ -96,7 +96,7 @@ unsigned int Lookup::hash(const UChar *c, unsigned int len)
   return val;
 }
 
-unsigned int Lookup::hash(const UString &key)
+unsigned int Lookup::hash(const Identifier &key)
 {
   return hash(key.data(), key.size());
 }
diff --git a/JavaScriptCore/kjs/lookup.h b/JavaScriptCore/kjs/lookup.h
index 88819a2..47084db 100644
--- a/JavaScriptCore/kjs/lookup.h
+++ b/JavaScriptCore/kjs/lookup.h
@@ -22,7 +22,7 @@
 #ifndef _KJSLOOKUP_H_
 #define _KJSLOOKUP_H_
 
-#include "ustring.h"
+#include "identifier.h"
 #include "value.h"
 #include <stdio.h>
 
@@ -96,7 +96,7 @@ namespace KJS {
     /**
      * Find an entry in the table, and return its value (i.e. the value field of HashEntry)
      */
-    static int find(const struct HashTable *table, const UString &s);
+    static int find(const struct HashTable *table, const Identifier &s);
     static int find(const struct HashTable *table,
 		    const UChar *c, unsigned int len);
 
@@ -106,14 +106,14 @@ namespace KJS {
      * especially the attr field.
      */
     static const HashEntry* findEntry(const struct HashTable *table,
-                                      const UString &s);
+                                      const Identifier &s);
     static const HashEntry* findEntry(const struct HashTable *table,
                                       const UChar *c, unsigned int len);
 
     /**
      * Calculate the hash value for a given key
      */
-    static unsigned int hash(const UString &key);
+    static unsigned int hash(const Identifier &key);
     static unsigned int hash(const UChar *c, unsigned int len);
     static unsigned int hash(const char *s);
   };
@@ -125,7 +125,7 @@ namespace KJS {
    * Helper for lookupFunction and lookupValueOrFunction
    */
   template <class FuncImp>
-  inline Value lookupOrCreateFunction(ExecState *exec, const UString &propertyName,
+  inline Value lookupOrCreateFunction(ExecState *exec, const Identifier &propertyName,
                                       const ObjectImp *thisObj, int token, int params, int attr)
   {
       // Look for cached value in dynamic map of properties (in ObjectImp)
@@ -162,7 +162,7 @@ namespace KJS {
    * @param thisObj "this"
    */
   template <class FuncImp, class ThisImp, class ParentImp>
-  inline Value lookupGet(ExecState *exec, const UString &propertyName,
+  inline Value lookupGet(ExecState *exec, const Identifier &propertyName,
                          const HashTable* table, const ThisImp* thisObj)
   {
     const HashEntry* entry = Lookup::findEntry(table, propertyName);
@@ -181,7 +181,7 @@ namespace KJS {
    * Using this instead of lookupGet prevents 'this' from implementing a dummy getValueProperty.
    */
   template <class FuncImp, class ParentImp>
-  inline Value lookupGetFunction(ExecState *exec, const UString &propertyName,
+  inline Value lookupGetFunction(ExecState *exec, const Identifier &propertyName,
                          const HashTable* table, const ObjectImp* thisObj)
   {
     const HashEntry* entry = Lookup::findEntry(table, propertyName);
@@ -201,7 +201,7 @@ namespace KJS {
    * Using this instead of lookupGet removes the need for a FuncImp class.
    */
   template <class ThisImp, class ParentImp>
-  inline Value lookupGetValue(ExecState *exec, const UString &propertyName,
+  inline Value lookupGetValue(ExecState *exec, const Identifier &propertyName,
                            const HashTable* table, const ThisImp* thisObj)
   {
     const HashEntry* entry = Lookup::findEntry(table, propertyName);
@@ -219,7 +219,7 @@ namespace KJS {
    * Lookup hash entry for property to be set, and set the value.
    */
   template <class ThisImp, class ParentImp>
-  inline void lookupPut(ExecState *exec, const UString &propertyName,
+  inline void lookupPut(ExecState *exec, const Identifier &propertyName,
                         const Value& value, int attr,
                         const HashTable* table, const ThisImp* thisObj)
   {
diff --git a/JavaScriptCore/kjs/math_object.cpp b/JavaScriptCore/kjs/math_object.cpp
index 6ca32d6..fd2defc 100644
--- a/JavaScriptCore/kjs/math_object.cpp
+++ b/JavaScriptCore/kjs/math_object.cpp
@@ -81,7 +81,7 @@ MathObjectImp::MathObjectImp(ExecState * /*exec*/,
 }
 
 // ECMA 15.8
-Value MathObjectImp::get(ExecState *exec, const UString &propertyName) const
+Value MathObjectImp::get(ExecState *exec, const Identifier &propertyName) const
 {
   return lookupGet<MathFuncImp, MathObjectImp, ObjectImp>( exec, propertyName, &mathTable, this );
 }
diff --git a/JavaScriptCore/kjs/math_object.h b/JavaScriptCore/kjs/math_object.h
index b0a4e2b..89c6807 100644
--- a/JavaScriptCore/kjs/math_object.h
+++ b/JavaScriptCore/kjs/math_object.h
@@ -31,7 +31,7 @@ namespace KJS {
   public:
     MathObjectImp(ExecState *exec,
                   ObjectPrototypeImp *objProto);
-    Value get(ExecState *exec, const UString &p) const;
+    Value get(ExecState *exec, const Identifier &p) const;
     Value getValueProperty(ExecState *exec, int token) const;
     virtual const ClassInfo *classInfo() const { return &info; }
     static const ClassInfo info;
diff --git a/JavaScriptCore/kjs/nodes.cpp b/JavaScriptCore/kjs/nodes.cpp
index 1ec868c..c353e52 100644
--- a/JavaScriptCore/kjs/nodes.cpp
+++ b/JavaScriptCore/kjs/nodes.cpp
@@ -1595,8 +1595,8 @@ Value AssignExprNode::evaluate(ExecState *exec)
 
 // ------------------------------ VarDeclNode ----------------------------------
 
-VarDeclNode::VarDeclNode(const UString *id, AssignExprNode *in)
-    : ident(*id), init(in)
+VarDeclNode::VarDeclNode(const Identifier &id, AssignExprNode *in)
+    : ident(id), init(in)
 {
 }
 
@@ -2031,12 +2031,12 @@ ForInNode::ForInNode(Node *l, Node *e, StatementNode *s)
 {
 }
 
-ForInNode::ForInNode(const UString *i, AssignExprNode *in, Node *e, StatementNode *s)
-  : ident(*i), init(in), expr(e), statement(s)
+ForInNode::ForInNode(const Identifier &i, AssignExprNode *in, Node *e, StatementNode *s)
+  : ident(i), init(in), expr(e), statement(s)
 {
   // for( var foo = bar in baz )
-  varDecl = new VarDeclNode(&ident, init);
-  lexpr = new ResolveNode(&ident);
+  varDecl = new VarDeclNode(ident, init);
+  lexpr = new ResolveNode(ident);
 }
 
 void ForInNode::ref()
@@ -2090,7 +2090,7 @@ Completion ForInNode::execute(ExecState *exec)
   ReferenceListIterator propIt = propList.begin();
 
   while (propIt != propList.end()) {
-    UString name = propIt->getPropertyName(exec);
+    Identifier name = propIt->getPropertyName(exec);
     if (!v.hasProperty(exec,name)) {
       propIt++;
       continue;
@@ -2674,7 +2674,7 @@ bool ParameterNode::deref()
   return Node::deref();
 }
 
-ParameterNode* ParameterNode::append(const UString *i)
+ParameterNode* ParameterNode::append(const Identifier &i)
 {
   ParameterNode *p = this;
   while (p->next)
@@ -2820,7 +2820,7 @@ bool FuncExprNode::deref()
 Value FuncExprNode::evaluate(ExecState *exec)
 {
   const List sc = exec->context().scopeChain();
-  FunctionImp *fimp = new DeclaredFunctionImp(exec, UString::null, body, sc);
+  FunctionImp *fimp = new DeclaredFunctionImp(exec, Identifier::null, body, sc);
   Value ret(fimp);
   List empty;
   Value proto = exec->interpreter()->builtinObject().construct(exec,empty);
diff --git a/JavaScriptCore/kjs/nodes.h b/JavaScriptCore/kjs/nodes.h
index 60dffe4..171b08b 100644
--- a/JavaScriptCore/kjs/nodes.h
+++ b/JavaScriptCore/kjs/nodes.h
@@ -119,9 +119,7 @@ namespace KJS {
     bool hitStatement(ExecState *exec);
     bool abortStatement(ExecState *exec);
     virtual Completion execute(ExecState *exec) = 0;
-    void pushLabel(const UString *id) {
-      if (id) ls.push(*id);
-    }
+    void pushLabel(const Identifier &id) { ls.push(id); }
   protected:
     LabelStack ls;
   private:
@@ -184,12 +182,12 @@ namespace KJS {
 
   class ResolveNode : public Node {
   public:
-    ResolveNode(const UString *s) : ident(*s) { }
+    ResolveNode(const Identifier &s) : ident(s) { }
     Value evaluate(ExecState *exec);
     virtual Reference evaluateReference(ExecState *exec);
     virtual void streamTo(SourceStream &s) const;
   private:
-    UString ident;
+    Identifier ident;
   };
 
   class GroupNode : public Node {
@@ -272,12 +270,12 @@ namespace KJS {
   class PropertyNode : public Node {
   public:
     PropertyNode(double d) : numeric(d) { }
-    PropertyNode(const UString *s) : str(*s) { }
+    PropertyNode(const Identifier &s) : str(s) { }
     Value evaluate(ExecState *exec);
     virtual void streamTo(SourceStream &s) const;
   private:
     double numeric;
-    UString str;
+    Identifier str;
   };
 
   class AccessorNode1 : public Node {
@@ -295,7 +293,7 @@ namespace KJS {
 
   class AccessorNode2 : public Node {
   public:
-    AccessorNode2(Node *e, const UString *s) : expr(e), ident(*s) { }
+    AccessorNode2(Node *e, const Identifier &s) : expr(e), ident(s) { }
     virtual void ref();
     virtual bool deref();
     Value evaluate(ExecState *exec);
@@ -303,7 +301,7 @@ namespace KJS {
     virtual void streamTo(SourceStream &s) const;
   private:
     Node *expr;
-    UString ident;
+    Identifier ident;
   };
 
   class ArgumentListNode : public Node {
@@ -616,14 +614,14 @@ namespace KJS {
 
   class VarDeclNode : public Node {
   public:
-    VarDeclNode(const UString *id, AssignExprNode *in);
+    VarDeclNode(const Identifier &id, AssignExprNode *in);
     virtual void ref();
     virtual bool deref();
     Value evaluate(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
     virtual void streamTo(SourceStream &s) const;
   private:
-    UString ident;
+    Identifier ident;
     AssignExprNode *init;
   };
 
@@ -740,14 +738,14 @@ namespace KJS {
   class ForInNode : public StatementNode {
   public:
     ForInNode(Node *l, Node *e, StatementNode *s);
-    ForInNode(const UString *i, AssignExprNode *in, Node *e, StatementNode *s);
+    ForInNode(const Identifier &i, AssignExprNode *in, Node *e, StatementNode *s);
     virtual void ref();
     virtual bool deref();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
     virtual void streamTo(SourceStream &s) const;
   private:
-    UString ident;
+    Identifier ident;
     AssignExprNode *init;
     Node *lexpr, *expr;
     VarDeclNode *varDecl;
@@ -757,21 +755,21 @@ namespace KJS {
   class ContinueNode : public StatementNode {
   public:
     ContinueNode() { }
-    ContinueNode(const UString *i) : ident(*i) { }
+    ContinueNode(const Identifier &i) : ident(i) { }
     virtual Completion execute(ExecState *exec);
     virtual void streamTo(SourceStream &s) const;
   private:
-    UString ident;
+    Identifier ident;
   };
 
   class BreakNode : public StatementNode {
   public:
     BreakNode() { }
-    BreakNode(const UString *i) : ident(*i) { }
+    BreakNode(const Identifier &i) : ident(i) { }
     virtual Completion execute(ExecState *exec);
     virtual void streamTo(SourceStream &s) const;
   private:
-    UString ident;
+    Identifier ident;
   };
 
   class ReturnNode : public StatementNode {
@@ -859,14 +857,14 @@ namespace KJS {
 
   class LabelNode : public StatementNode {
   public:
-    LabelNode(const UString *l, StatementNode *s) : label(*l), statement(s) { }
+    LabelNode(const Identifier &l, StatementNode *s) : label(l), statement(s) { }
     virtual void ref();
     virtual bool deref();
     virtual Completion execute(ExecState *exec);
     virtual void processVarDecls(ExecState *exec);
     virtual void streamTo(SourceStream &s) const;
   private:
-    UString label;
+    Identifier label;
     StatementNode *statement;
   };
 
@@ -883,7 +881,7 @@ namespace KJS {
 
   class CatchNode : public StatementNode {
   public:
-    CatchNode(const UString *i, StatementNode *b) : ident(*i), block(b) {}
+    CatchNode(const Identifier &i, StatementNode *b) : ident(i), block(b) {}
     virtual void ref();
     virtual bool deref();
     virtual Completion execute(ExecState *exec);
@@ -891,7 +889,7 @@ namespace KJS {
     virtual void processVarDecls(ExecState *exec);
     virtual void streamTo(SourceStream &s) const;
   private:
-    UString ident;
+    Identifier ident;
     StatementNode *block;
   };
 
@@ -924,16 +922,16 @@ namespace KJS {
 
   class ParameterNode : public Node {
   public:
-    ParameterNode(const UString *i) : id(*i), next(0L) { }
-    ParameterNode *append(const UString *i);
+    ParameterNode(const Identifier &i) : id(i), next(0L) { }
+    ParameterNode *append(const Identifier &i);
     virtual void ref();
     virtual bool deref();
     Value evaluate(ExecState *exec);
-    UString ident() { return id; }
+    Identifier ident() { return id; }
     ParameterNode *nextParam() { return next; }
     virtual void streamTo(SourceStream &s) const;
   private:
-    UString id;
+    Identifier id;
     ParameterNode *next;
   };
 
@@ -953,8 +951,8 @@ namespace KJS {
 
   class FuncDeclNode : public StatementNode {
   public:
-    FuncDeclNode(const UString *i, ParameterNode *p, FunctionBodyNode *b)
-      : ident(*i), param(p), body(b) { }
+    FuncDeclNode(const Identifier &i, ParameterNode *p, FunctionBodyNode *b)
+      : ident(i), param(p), body(b) { }
     virtual void ref();
     virtual bool deref();
     Completion execute(ExecState */*exec*/)
@@ -962,7 +960,7 @@ namespace KJS {
     void processFuncDecl(ExecState *exec);
     virtual void streamTo(SourceStream &s) const;
   private:
-    UString ident;
+    Identifier ident;
     ParameterNode *param;
     FunctionBodyNode *body;
   };
diff --git a/JavaScriptCore/kjs/number_object.cpp b/JavaScriptCore/kjs/number_object.cpp
index 8fe9e94..8fc7ccf 100644
--- a/JavaScriptCore/kjs/number_object.cpp
+++ b/JavaScriptCore/kjs/number_object.cpp
@@ -130,7 +130,7 @@ NumberObjectImp::NumberObjectImp(ExecState *exec,
   put(exec,lengthPropertyName, Number(1), ReadOnly|DontDelete|DontEnum);
 }
 
-Value NumberObjectImp::get(ExecState *exec, const UString &propertyName) const
+Value NumberObjectImp::get(ExecState *exec, const Identifier &propertyName) const
 {
   return lookupGetValue<NumberObjectImp, InternalFunctionImp>( exec, propertyName, &numberTable, this );
 }
diff --git a/JavaScriptCore/kjs/number_object.h b/JavaScriptCore/kjs/number_object.h
index b6df986..5b49e23 100644
--- a/JavaScriptCore/kjs/number_object.h
+++ b/JavaScriptCore/kjs/number_object.h
@@ -84,7 +84,7 @@ namespace KJS {
     virtual bool implementsCall() const;
     virtual Value call(ExecState *exec, Object &thisObj, const List &args);
 
-    Value get(ExecState *exec, const UString &p) const;
+    Value get(ExecState *exec, const Identifier &p) const;
     Value getValueProperty(ExecState *exec, int token) const;
     virtual const ClassInfo *classInfo() const { return &info; }
     static const ClassInfo info;
diff --git a/JavaScriptCore/kjs/object.cpp b/JavaScriptCore/kjs/object.cpp
index 056178a..7a551a0 100644
--- a/JavaScriptCore/kjs/object.cpp
+++ b/JavaScriptCore/kjs/object.cpp
@@ -40,12 +40,12 @@
 
 namespace KJS {
 
-extern const UString argumentsPropertyName("arguments");
-extern const UString lengthPropertyName("length");
-extern const UString prototypePropertyName("prototype");
-extern const UString specialPrototypePropertyName("__proto__");
-extern const UString toStringPropertyName("toString");
-extern const UString valueOfPropertyName("valueOf");
+extern const Identifier argumentsPropertyName("arguments");
+extern const Identifier lengthPropertyName("length");
+extern const Identifier prototypePropertyName("prototype");
+extern const Identifier specialPrototypePropertyName("__proto__");
+extern const Identifier toStringPropertyName("toString");
+extern const Identifier valueOfPropertyName("valueOf");
 
 // ------------------------------ Object ---------------------------------------
 
@@ -137,7 +137,7 @@ UString ObjectImp::className() const
   return "Object";
 }
 
-Value ObjectImp::get(ExecState *exec, const UString &propertyName) const
+Value ObjectImp::get(ExecState *exec, const Identifier &propertyName) const
 {
   ValueImp *imp = getDirect(propertyName);
   if ( imp )
@@ -156,20 +156,20 @@ Value ObjectImp::get(ExecState *exec, const UString &propertyName) const
 
 Value ObjectImp::get(ExecState *exec, unsigned propertyName) const
 {
-  return get(exec, UString::from(propertyName));
+  return get(exec, Identifier::from(propertyName));
 }
 
 // This get method only looks at the property map.
 // A bit like hasProperty(recursive=false), this doesn't go to the prototype.
 // This is used e.g. by lookupOrCreateFunction (to cache a function, we don't want
 // to look up in the prototype, it might already exist there)
-ValueImp* ObjectImp::getDirect(const UString& propertyName) const
+ValueImp* ObjectImp::getDirect(const Identifier& propertyName) const
 {
   return _prop.get(propertyName);
 }
 
 // ECMA 8.6.2.2
-void ObjectImp::put(ExecState *exec, const UString &propertyName,
+void ObjectImp::put(ExecState *exec, const Identifier &propertyName,
                      const Value &value, int attr)
 {
   assert(!value.isNull());
@@ -199,11 +199,11 @@ void ObjectImp::put(ExecState *exec, const UString &propertyName,
 void ObjectImp::put(ExecState *exec, unsigned propertyName,
                      const Value &value, int attr)
 {
-  put(exec, UString::from(propertyName), value, attr);
+  put(exec, Identifier::from(propertyName), value, attr);
 }
 
 // ECMA 8.6.2.3
-bool ObjectImp::canPut(ExecState *, const UString &propertyName) const
+bool ObjectImp::canPut(ExecState *, const Identifier &propertyName) const
 {
   int attributes;
   ValueImp *v = _prop.get(propertyName, attributes);
@@ -221,7 +221,7 @@ bool ObjectImp::canPut(ExecState *, const UString &propertyName) const
 }
 
 // ECMA 8.6.2.4
-bool ObjectImp::hasProperty(ExecState *exec, const UString &propertyName) const
+bool ObjectImp::hasProperty(ExecState *exec, const Identifier &propertyName) const
 {
   if (_prop.get(propertyName))
     return true;
@@ -241,11 +241,11 @@ bool ObjectImp::hasProperty(ExecState *exec, const UString &propertyName) const
 
 bool ObjectImp::hasProperty(ExecState *exec, unsigned propertyName) const
 {
-  return hasProperty(exec, UString::from(propertyName));
+  return hasProperty(exec, Identifier::from(propertyName));
 }
 
 // ECMA 8.6.2.5
-bool ObjectImp::deleteProperty(ExecState */*exec*/, const UString &propertyName)
+bool ObjectImp::deleteProperty(ExecState */*exec*/, const Identifier &propertyName)
 {
   int attributes;
   ValueImp *v = _prop.get(propertyName, attributes);
@@ -265,7 +265,7 @@ bool ObjectImp::deleteProperty(ExecState */*exec*/, const UString &propertyName)
 
 bool ObjectImp::deleteProperty(ExecState *exec, unsigned propertyName)
 {
-  return deleteProperty(exec, UString::from(propertyName));
+  return deleteProperty(exec, Identifier::from(propertyName));
 }
 
 void ObjectImp::deleteAllProperties( ExecState * )
@@ -328,7 +328,7 @@ Value ObjectImp::defaultValue(ExecState *exec, Type hint) const
   return err;
 }
 
-const HashEntry* ObjectImp::findPropertyHashEntry( const UString& propertyName ) const
+const HashEntry* ObjectImp::findPropertyHashEntry( const Identifier& propertyName ) const
 {
   const ClassInfo *info = classInfo();
   while (info) {
diff --git a/JavaScriptCore/kjs/object.h b/JavaScriptCore/kjs/object.h
index 7d716da..10a5b60 100644
--- a/JavaScriptCore/kjs/object.h
+++ b/JavaScriptCore/kjs/object.h
@@ -136,7 +136,7 @@ namespace KJS {
      *
      * @return The specified property, or Undefined
      */
-    Value get(ExecState *exec, const UString &propertyName) const;
+    Value get(ExecState *exec, const Identifier &propertyName) const;
     Value get(ExecState *exec, unsigned propertyName) const;
 
     /**
@@ -148,7 +148,7 @@ namespace KJS {
      * @param propertyName The name of the property to set
      * @param propertyValue The value to set
      */
-    void put(ExecState *exec, const UString &propertyName,
+    void put(ExecState *exec, const Identifier &propertyName,
              const Value &value, int attr = None);
     void put(ExecState *exec, unsigned propertyName,
              const Value &value, int attr = None);
@@ -163,7 +163,7 @@ namespace KJS {
      * @param propertyName The name of the property
      * @return true if the property can be set, otherwise false
      */
-    bool canPut(ExecState *exec, const UString &propertyName) const;
+    bool canPut(ExecState *exec, const Identifier &propertyName) const;
 
     /**
      * Checks to see whether the object (or any object in it's prototype chain)
@@ -175,7 +175,7 @@ namespace KJS {
      * @param propertyName The name of the property to check for
      * @return true if the object has the property, otherwise false
      */
-    bool hasProperty(ExecState *exec, const UString &propertyName) const;
+    bool hasProperty(ExecState *exec, const Identifier &propertyName) const;
     bool hasProperty(ExecState *exec, unsigned propertyName) const;
 
     /**
@@ -189,7 +189,7 @@ namespace KJS {
      * exist on the object. false if deleting the specified property is not
      * allowed.
      */
-    bool deleteProperty(ExecState *exec, const UString &propertyName);
+    bool deleteProperty(ExecState *exec, const Identifier &propertyName);
     bool deleteProperty(ExecState *exec, unsigned propertyName);
 
     /**
@@ -477,7 +477,7 @@ namespace KJS {
      * @see Object::get()
      */
     // [[Get]] - must be implemented by all Objects
-    virtual Value get(ExecState *exec, const UString &propertyName) const;
+    virtual Value get(ExecState *exec, const Identifier &propertyName) const;
     virtual Value get(ExecState *exec, unsigned propertyName) const;
 
     /**
@@ -486,7 +486,7 @@ namespace KJS {
      *
      * @see Object::put()
      */
-    virtual void put(ExecState *exec, const UString &propertyName,
+    virtual void put(ExecState *exec, const Identifier &propertyName,
                      const Value &value, int attr = None);
     virtual void put(ExecState *exec, unsigned propertyName,
                      const Value &value, int attr = None);
@@ -497,7 +497,7 @@ namespace KJS {
      *
      * @see Object::canPut()
      */
-    virtual bool canPut(ExecState *exec, const UString &propertyName) const;
+    virtual bool canPut(ExecState *exec, const Identifier &propertyName) const;
 
     /**
      * Implementation of the [[HasProperty]] internal property (implemented by
@@ -506,7 +506,7 @@ namespace KJS {
      * @see Object::hasProperty()
      */
     virtual bool hasProperty(ExecState *exec,
-			     const UString &propertyName) const;
+			     const Identifier &propertyName) const;
     virtual bool hasProperty(ExecState *exec, unsigned propertyName) const;
 
     /**
@@ -516,7 +516,7 @@ namespace KJS {
      * @see Object::deleteProperty()
      */
     virtual bool deleteProperty(ExecState *exec,
-                                const UString &propertyName);
+                                const Identifier &propertyName);
     virtual bool deleteProperty(ExecState *exec, unsigned propertyName);
 
     /**
@@ -579,9 +579,9 @@ namespace KJS {
     UString toString(ExecState *exec) const;
     Object toObject(ExecState *exec) const;
 
-    ValueImp* getDirect(const UString& propertyName) const;
+    ValueImp* getDirect(const Identifier& propertyName) const;
   private:
-    const HashEntry* findPropertyHashEntry( const UString& propertyName ) const;
+    const HashEntry* findPropertyHashEntry( const Identifier& propertyName ) const;
     PropertyMap _prop;
     ValueImp *_proto;
     ValueImp *_internalValue;
@@ -640,28 +640,28 @@ namespace KJS {
   inline UString Object::className() const
     { return imp()->className(); }
 
-  inline Value Object::get(ExecState *exec, const UString &propertyName) const
+  inline Value Object::get(ExecState *exec, const Identifier &propertyName) const
     { return imp()->get(exec,propertyName); }
 
   inline Value Object::get(ExecState *exec, unsigned propertyName) const
     { return imp()->get(exec,propertyName); }
 
-  inline void Object::put(ExecState *exec, const UString &propertyName, const Value &value, int attr)
+  inline void Object::put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr)
     { imp()->put(exec,propertyName,value,attr); }
 
   inline void Object::put(ExecState *exec, unsigned propertyName, const Value &value, int attr)
     { imp()->put(exec,propertyName,value,attr); }
 
-  inline bool Object::canPut(ExecState *exec, const UString &propertyName) const
+  inline bool Object::canPut(ExecState *exec, const Identifier &propertyName) const
     { return imp()->canPut(exec,propertyName); }
 
-  inline bool Object::hasProperty(ExecState *exec, const UString &propertyName) const
+  inline bool Object::hasProperty(ExecState *exec, const Identifier &propertyName) const
     { return imp()->hasProperty(exec, propertyName); }
 
   inline bool Object::hasProperty(ExecState *exec, unsigned propertyName) const
     { return imp()->hasProperty(exec, propertyName); }
 
-  inline bool Object::deleteProperty(ExecState *exec, const UString &propertyName)
+  inline bool Object::deleteProperty(ExecState *exec, const Identifier &propertyName)
     { return imp()->deleteProperty(exec,propertyName); }
 
   inline bool Object::deleteProperty(ExecState *exec, unsigned propertyName)
@@ -703,12 +703,12 @@ namespace KJS {
   inline void Object::setInternalValue(const Value &v)
     { imp()->setInternalValue(v); }
 
-  extern const UString argumentsPropertyName;
-  extern const UString lengthPropertyName;
-  extern const UString prototypePropertyName;
-  extern const UString specialPrototypePropertyName;
-  extern const UString toStringPropertyName;
-  extern const UString valueOfPropertyName;
+  extern const Identifier argumentsPropertyName;
+  extern const Identifier lengthPropertyName;
+  extern const Identifier prototypePropertyName;
+  extern const Identifier specialPrototypePropertyName;
+  extern const Identifier toStringPropertyName;
+  extern const Identifier valueOfPropertyName;
 
 }; // namespace
 
diff --git a/JavaScriptCore/kjs/property_map.cpp b/JavaScriptCore/kjs/property_map.cpp
index 5fa873e..3df4a2e 100644
--- a/JavaScriptCore/kjs/property_map.cpp
+++ b/JavaScriptCore/kjs/property_map.cpp
@@ -93,7 +93,7 @@ bool PropertyMap::keysMatch(const UString::Rep *a, const UString::Rep *b)
     return true;
 }
 
-ValueImp *PropertyMap::get(const UString &name, int &attributes) const
+ValueImp *PropertyMap::get(const Identifier &name, int &attributes) const
 {
     if (!_table) {
         UString::Rep *key = _singleEntry.key;
@@ -115,7 +115,7 @@ ValueImp *PropertyMap::get(const UString &name, int &attributes) const
     return 0;
 }
 
-ValueImp *PropertyMap::get(const UString &name) const
+ValueImp *PropertyMap::get(const Identifier &name) const
 {
     if (!_table) {
         UString::Rep *key = _singleEntry.key;
@@ -133,7 +133,7 @@ ValueImp *PropertyMap::get(const UString &name) const
     return 0;
 }
 
-void PropertyMap::put(const UString &name, ValueImp *value, int attributes)
+void PropertyMap::put(const Identifier &name, ValueImp *value, int attributes)
 {
     if (!_table) {
         UString::Rep *key = _singleEntry.key;
@@ -209,7 +209,7 @@ void PropertyMap::expand()
     free(oldTable);
 }
 
-void PropertyMap::remove(const UString &name)
+void PropertyMap::remove(const Identifier &name)
 {
     UString::Rep *key;
 
@@ -269,11 +269,11 @@ void PropertyMap::addEnumerablesToReferenceList(ReferenceList &list, const Objec
 {
     UString::Rep *key = _singleEntry.key;
     if (key && !(_singleEntry.attributes & DontEnum))
-        list.append(Reference(base, key));
+        list.append(Reference(base, Identifier(key)));
     for (int i = 0; i != _tableSize; ++i) {
         UString::Rep *key = _table[i].key;
         if (key && !(_table[i].attributes & DontEnum))
-            list.append(Reference(base, key));
+            list.append(Reference(base, Identifier(key)));
     }
 }
 
diff --git a/JavaScriptCore/kjs/property_map.h b/JavaScriptCore/kjs/property_map.h
index 3b055ef..f117cfc 100644
--- a/JavaScriptCore/kjs/property_map.h
+++ b/JavaScriptCore/kjs/property_map.h
@@ -23,7 +23,7 @@
 #ifndef _KJS_PROPERTY_MAP_H_
 #define _KJS_PROPERTY_MAP_H_
 
-#include "ustring.h"
+#include "identifier.h"
 
 namespace KJS {
 
@@ -46,10 +46,10 @@ namespace KJS {
 
         void clear();
         
-        void put(const UString &name, ValueImp *value, int attributes);
-        void remove(const UString &name);
-        ValueImp *get(const UString &name) const;
-        ValueImp *get(const UString &name, int &attributes) const;
+        void put(const Identifier &name, ValueImp *value, int attributes);
+        void remove(const Identifier &name);
+        ValueImp *get(const Identifier &name) const;
+        ValueImp *get(const Identifier &name, int &attributes) const;
 
         void mark() const;
         void addEnumerablesToReferenceList(ReferenceList &, const Object &) const;
diff --git a/JavaScriptCore/kjs/reference.cpp b/JavaScriptCore/kjs/reference.cpp
index fe4fabd..6191ce2 100644
--- a/JavaScriptCore/kjs/reference.cpp
+++ b/JavaScriptCore/kjs/reference.cpp
@@ -27,7 +27,7 @@ using namespace KJS;
 
 // ------------------------------ Reference ------------------------------------
 
-Reference::Reference(const Object& b, const UString& p)
+Reference::Reference(const Object& b, const Identifier& p)
   : base(b),
     baseIsValue(false),
     propertyNameIsNumber(false),
@@ -43,7 +43,7 @@ Reference::Reference(const Object& b, unsigned p)
 {
 }
 
-Reference::Reference(const Null& b, const UString& p)
+Reference::Reference(const Null& b, const Identifier& p)
   : base(b),
     baseIsValue(false),
     propertyNameIsNumber(false),
@@ -82,17 +82,17 @@ Value Reference::getBase(ExecState *exec) const
   return base;
 }
 
-UString Reference::getPropertyName(ExecState *exec) const
+Identifier Reference::getPropertyName(ExecState *exec) const
 {
   if (baseIsValue) {
     // the spec wants a runtime error here. But getValue() and putValue()
     // will catch this case on their own earlier. When returning a Null
     // string we should be on the safe side.
-    return UString();
+    return Identifier();
   }
 
   if (propertyNameIsNumber && prop.isNull())
-    prop = UString::from(propertyNameAsNumber);
+    prop = Identifier::from(propertyNameAsNumber);
   return prop;
 }
 
diff --git a/JavaScriptCore/kjs/reference.h b/JavaScriptCore/kjs/reference.h
index 5887ed1..44b4cd6 100644
--- a/JavaScriptCore/kjs/reference.h
+++ b/JavaScriptCore/kjs/reference.h
@@ -23,6 +23,7 @@
 #ifndef _KJS_REFERENCE_H_
 #define _KJS_REFERENCE_H_
 
+#include "identifier.h"
 #include "value.h"
 
 namespace KJS {
@@ -31,9 +32,9 @@ namespace KJS {
     friend class ReferenceList;
     friend class ReferenceListIterator;
   public:
-    Reference(const Object& b, const UString& p);
+    Reference(const Object& b, const Identifier& p);
     Reference(const Object& b, unsigned p);
-    Reference(const Null& b, const UString& p);
+    Reference(const Null& b, const Identifier& p);
     Reference(const Null& b, unsigned p);
     static Reference makeValueReference(const Value& v);
     
@@ -49,7 +50,7 @@ namespace KJS {
      * Performs the GetPropertyName type conversion operation on this value
      * (ECMA 8.7)
      */
-    UString getPropertyName(ExecState *exec) const;
+    Identifier getPropertyName(ExecState *exec) const;
 
     /**
      * Performs the GetValue type conversion operation on this value
@@ -73,7 +74,7 @@ namespace KJS {
     unsigned propertyNameAsNumber;
     bool baseIsValue;
     bool propertyNameIsNumber;
-    mutable UString prop;
+    mutable Identifier prop;
   };
 }
 
diff --git a/JavaScriptCore/kjs/regexp_object.cpp b/JavaScriptCore/kjs/regexp_object.cpp
index 1a1af57..81f030a 100644
--- a/JavaScriptCore/kjs/regexp_object.cpp
+++ b/JavaScriptCore/kjs/regexp_object.cpp
@@ -193,7 +193,7 @@ Object RegExpObjectImp::arrayOfMatches(ExecState *exec, const UString &result) c
   return arr;
 }
 
-Value RegExpObjectImp::get(ExecState *exec, const UString &p) const
+Value RegExpObjectImp::get(ExecState *exec, const Identifier &p) const
 {
   if (p[0] == '$' && lastOvector)
   {
diff --git a/JavaScriptCore/kjs/regexp_object.h b/JavaScriptCore/kjs/regexp_object.h
index 12d1bff..998d4d2 100644
--- a/JavaScriptCore/kjs/regexp_object.h
+++ b/JavaScriptCore/kjs/regexp_object.h
@@ -72,7 +72,7 @@ namespace KJS {
     virtual bool implementsCall() const;
     virtual Value call(ExecState *exec, Object &thisObj, const List &args);
 
-    Value get(ExecState *exec, const UString &p) const;
+    Value get(ExecState *exec, const Identifier &p) const;
     int ** registerRegexp( const RegExp* re, const UString& s );
     void setSubPatterns(int num) { lastNrSubPatterns = num; }
     Object arrayOfMatches(ExecState *exec, const UString &result) const;
diff --git a/JavaScriptCore/kjs/string_object.cpp b/JavaScriptCore/kjs/string_object.cpp
index 3864ba0..d45dbb7 100644
--- a/JavaScriptCore/kjs/string_object.cpp
+++ b/JavaScriptCore/kjs/string_object.cpp
@@ -49,28 +49,28 @@ StringInstanceImp::StringInstanceImp(const Object &proto, const UString &string)
   setInternalValue(String(string));
 }
 
-Value StringInstanceImp::get(ExecState *exec, const UString &propertyName) const
+Value StringInstanceImp::get(ExecState *exec, const Identifier &propertyName) const
 {
   if (propertyName == lengthPropertyName)
     return Number(internalValue().toString(exec).size());
   return ObjectImp::get(exec, propertyName);
 }
 
-void StringInstanceImp::put(ExecState *exec, const UString &propertyName, const Value &value, int attr)
+void StringInstanceImp::put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr)
 {
   if (propertyName == lengthPropertyName)
     return;
   ObjectImp::put(exec, propertyName, value, attr);
 }
 
-bool StringInstanceImp::hasProperty(ExecState *exec, const UString &propertyName) const
+bool StringInstanceImp::hasProperty(ExecState *exec, const Identifier &propertyName) const
 {
   if (propertyName == lengthPropertyName)
     return true;
   return ObjectImp::hasProperty(exec, propertyName);
 }
 
-bool StringInstanceImp::deleteProperty(ExecState *exec, const UString &propertyName)
+bool StringInstanceImp::deleteProperty(ExecState *exec, const Identifier &propertyName)
 {
   if (propertyName == lengthPropertyName)
     return false;
@@ -127,7 +127,7 @@ StringPrototypeImp::StringPrototypeImp(ExecState *exec,
 
 }
 
-Value StringPrototypeImp::get(ExecState *exec, const UString &propertyName) const
+Value StringPrototypeImp::get(ExecState *exec, const Identifier &propertyName) const
 {
   return lookupGetFunction<StringProtoFuncImp, StringInstanceImp>( exec, propertyName, &stringTable, this );
 }
diff --git a/JavaScriptCore/kjs/string_object.h b/JavaScriptCore/kjs/string_object.h
index 1989a70..5eb6aa9 100644
--- a/JavaScriptCore/kjs/string_object.h
+++ b/JavaScriptCore/kjs/string_object.h
@@ -32,10 +32,10 @@ namespace KJS {
     StringInstanceImp(const Object &proto);
     StringInstanceImp(const Object &proto, const UString &string);
 
-    virtual Value get(ExecState *exec, const UString &propertyName) const;
-    virtual void put(ExecState *exec, const UString &propertyName, const Value &value, int attr = None);
-    virtual bool hasProperty(ExecState *exec, const UString &propertyName) const;
-    virtual bool deleteProperty(ExecState *exec, const UString &propertyName);
+    virtual Value get(ExecState *exec, const Identifier &propertyName) const;
+    virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
+    virtual bool hasProperty(ExecState *exec, const Identifier &propertyName) const;
+    virtual bool deleteProperty(ExecState *exec, const Identifier &propertyName);
 
     virtual const ClassInfo *classInfo() const { return &info; }
     static const ClassInfo info;
@@ -51,7 +51,7 @@ namespace KJS {
   public:
     StringPrototypeImp(ExecState *exec,
                        ObjectPrototypeImp *objProto);
-    Value get(ExecState *exec, const UString &p) const;
+    Value get(ExecState *exec, const Identifier &p) const;
     virtual const ClassInfo *classInfo() const { return &info; }
     static const ClassInfo info;
   };
diff --git a/WebCore/ChangeLog-2002-12-03 b/WebCore/ChangeLog-2002-12-03
index 1f4f9d6..b619d6c 100644
--- a/WebCore/ChangeLog-2002-12-03
+++ b/WebCore/ChangeLog-2002-12-03
@@ -1,3 +1,31 @@
+2002-11-19  Darin Adler  <darin at apple.com>
+
+	- a first step towards atomic identifiers in JavaScript
+
+	Most places that work with identifiers now use Identifier
+	instead of UString.
+
+        * khtml/ecma/kjs_binding.cpp:
+        * khtml/ecma/kjs_binding.h:
+        * khtml/ecma/kjs_css.cpp:
+        * khtml/ecma/kjs_css.h:
+        * khtml/ecma/kjs_dom.cpp:
+        * khtml/ecma/kjs_dom.h:
+        * khtml/ecma/kjs_events.cpp:
+        * khtml/ecma/kjs_events.h:
+        * khtml/ecma/kjs_html.cpp:
+        * khtml/ecma/kjs_html.h:
+        * khtml/ecma/kjs_navigator.cpp:
+        * khtml/ecma/kjs_navigator.h:
+        * khtml/ecma/kjs_range.cpp:
+        * khtml/ecma/kjs_range.h:
+        * khtml/ecma/kjs_traversal.cpp:
+        * khtml/ecma/kjs_traversal.h:
+        * khtml/ecma/kjs_views.cpp:
+        * khtml/ecma/kjs_views.h:
+        * khtml/ecma/kjs_window.cpp:
+        * khtml/ecma/kjs_window.h:
+
 2002-11-18  Darin Adler  <darin at apple.com>
 
         * force-js-clean-timestamp: Another Object change.
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index 1f4f9d6..b619d6c 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,31 @@
+2002-11-19  Darin Adler  <darin at apple.com>
+
+	- a first step towards atomic identifiers in JavaScript
+
+	Most places that work with identifiers now use Identifier
+	instead of UString.
+
+        * khtml/ecma/kjs_binding.cpp:
+        * khtml/ecma/kjs_binding.h:
+        * khtml/ecma/kjs_css.cpp:
+        * khtml/ecma/kjs_css.h:
+        * khtml/ecma/kjs_dom.cpp:
+        * khtml/ecma/kjs_dom.h:
+        * khtml/ecma/kjs_events.cpp:
+        * khtml/ecma/kjs_events.h:
+        * khtml/ecma/kjs_html.cpp:
+        * khtml/ecma/kjs_html.h:
+        * khtml/ecma/kjs_navigator.cpp:
+        * khtml/ecma/kjs_navigator.h:
+        * khtml/ecma/kjs_range.cpp:
+        * khtml/ecma/kjs_range.h:
+        * khtml/ecma/kjs_traversal.cpp:
+        * khtml/ecma/kjs_traversal.h:
+        * khtml/ecma/kjs_views.cpp:
+        * khtml/ecma/kjs_views.h:
+        * khtml/ecma/kjs_window.cpp:
+        * khtml/ecma/kjs_window.h:
+
 2002-11-18  Darin Adler  <darin at apple.com>
 
         * force-js-clean-timestamp: Another Object change.
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 1f4f9d6..b619d6c 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,31 @@
+2002-11-19  Darin Adler  <darin at apple.com>
+
+	- a first step towards atomic identifiers in JavaScript
+
+	Most places that work with identifiers now use Identifier
+	instead of UString.
+
+        * khtml/ecma/kjs_binding.cpp:
+        * khtml/ecma/kjs_binding.h:
+        * khtml/ecma/kjs_css.cpp:
+        * khtml/ecma/kjs_css.h:
+        * khtml/ecma/kjs_dom.cpp:
+        * khtml/ecma/kjs_dom.h:
+        * khtml/ecma/kjs_events.cpp:
+        * khtml/ecma/kjs_events.h:
+        * khtml/ecma/kjs_html.cpp:
+        * khtml/ecma/kjs_html.h:
+        * khtml/ecma/kjs_navigator.cpp:
+        * khtml/ecma/kjs_navigator.h:
+        * khtml/ecma/kjs_range.cpp:
+        * khtml/ecma/kjs_range.h:
+        * khtml/ecma/kjs_traversal.cpp:
+        * khtml/ecma/kjs_traversal.h:
+        * khtml/ecma/kjs_views.cpp:
+        * khtml/ecma/kjs_views.h:
+        * khtml/ecma/kjs_window.cpp:
+        * khtml/ecma/kjs_window.h:
+
 2002-11-18  Darin Adler  <darin at apple.com>
 
         * force-js-clean-timestamp: Another Object change.
diff --git a/WebCore/khtml/ecma/kjs_binding.cpp b/WebCore/khtml/ecma/kjs_binding.cpp
index a8dda08..4b214a2 100644
--- a/WebCore/khtml/ecma/kjs_binding.cpp
+++ b/WebCore/khtml/ecma/kjs_binding.cpp
@@ -38,7 +38,7 @@ using namespace KJS;
  * these may be CSS exceptions - need to check - pmk
  */
 
-Value DOMObject::get(ExecState *exec, const UString &p) const
+Value DOMObject::get(ExecState *exec, const Identifier &p) const
 {
   Value result;
   try {
@@ -60,7 +60,7 @@ Value DOMObject::get(ExecState *exec, const UString &p) const
   return result;
 }
 
-void DOMObject::put(ExecState *exec, const UString &propertyName,
+void DOMObject::put(ExecState *exec, const Identifier &propertyName,
                     const Value &value, int attr)
 {
   try {
@@ -80,7 +80,7 @@ UString DOMObject::toString(ExecState *) const
   return "[object " + className() + "]";
 }
 
-Value DOMFunction::get(ExecState *exec, const UString &propertyName) const
+Value DOMFunction::get(ExecState *exec, const Identifier &propertyName) const
 {
   Value result;
   try {
diff --git a/WebCore/khtml/ecma/kjs_binding.h b/WebCore/khtml/ecma/kjs_binding.h
index 2072650..40f64a0 100644
--- a/WebCore/khtml/ecma/kjs_binding.h
+++ b/WebCore/khtml/ecma/kjs_binding.h
@@ -41,13 +41,13 @@ namespace KJS {
   public:
     DOMObject(const Object &proto) : ObjectImp(proto) {}
     DOMObject() : ObjectImp() {}
-    virtual Value get(ExecState *exec, const UString &propertyName) const;
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const
+    virtual Value get(ExecState *exec, const Identifier &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const
       { return ObjectImp::get(exec, propertyName); }
 
-    virtual void put(ExecState *exec, const UString &propertyName,
+    virtual void put(ExecState *exec, const Identifier &propertyName,
                      const Value &value, int attr = None);
-    virtual void tryPut(ExecState *exec, const UString &propertyName,
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName,
                         const Value& value, int attr = None)
       { ObjectImp::put(exec,propertyName,value,attr); }
 
@@ -62,8 +62,8 @@ namespace KJS {
   class DOMFunction : public ObjectImp {
   public:
     DOMFunction() : ObjectImp( /* proto? */ ) {}
-    virtual Value get(ExecState *exec, const UString &propertyName) const;
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const
+    virtual Value get(ExecState *exec, const Identifier &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const
       { return ObjectImp::get(exec, propertyName); }
 
     virtual bool implementsCall() const { return true; }
@@ -161,7 +161,7 @@ namespace KJS {
    * we call tryGet instead of get, in DOMObjects.
    */
   template <class FuncImp, class ThisImp, class ParentImp>
-  inline Value DOMObjectLookupGet(ExecState *exec, const UString &propertyName,
+  inline Value DOMObjectLookupGet(ExecState *exec, const Identifier &propertyName,
                                   const HashTable* table, const ThisImp* thisObj)
   {
     const HashEntry* entry = Lookup::findEntry(table, propertyName);
@@ -179,7 +179,7 @@ namespace KJS {
    * functions, only "values".
    */
   template <class ThisImp, class ParentImp>
-  inline Value DOMObjectLookupGetValue(ExecState *exec, const UString &propertyName,
+  inline Value DOMObjectLookupGetValue(ExecState *exec, const Identifier &propertyName,
                                        const HashTable* table, const ThisImp* thisObj)
   {
     const HashEntry* entry = Lookup::findEntry(table, propertyName);
@@ -197,7 +197,7 @@ namespace KJS {
    * we call tryPut instead of put, in DOMObjects.
    */
   template <class ThisImp, class ParentImp>
-  inline void DOMObjectLookupPut(ExecState *exec, const UString &propertyName,
+  inline void DOMObjectLookupPut(ExecState *exec, const Identifier &propertyName,
                                  const Value& value, int attr,
                                  const HashTable* table, ThisImp* thisObj)
   {
@@ -225,7 +225,7 @@ namespace KJS {
    * that cached object. Note that the object constructor must take 1 argument, exec.
    */
   template <class ClassCtor>
-  inline Object cacheGlobalObject(ExecState *exec, const UString &propertyName)
+  inline Object cacheGlobalObject(ExecState *exec, const Identifier &propertyName)
   {
     ValueImp *obj = static_cast<ObjectImp*>(exec->interpreter()->globalObject().imp())->getDirect(propertyName);
     if (obj)
@@ -257,7 +257,7 @@ namespace KJS {
 #define DEFINE_PROTOTYPE(ClassName,ClassProto) \
   namespace KJS { \
   class ClassProto : public ObjectImp { \
-    friend Object cacheGlobalObject<ClassProto>(ExecState *exec, const UString &propertyName); \
+    friend Object cacheGlobalObject<ClassProto>(ExecState *exec, const Identifier &propertyName); \
   public: \
     static Object self(ExecState *exec) \
     { \
@@ -270,25 +270,25 @@ namespace KJS {
   public: \
     virtual const ClassInfo *classInfo() const { return &info; } \
     static const ClassInfo info; \
-    Value get(ExecState *exec, const UString &propertyName) const; \
-    bool hasProperty(ExecState *exec, const UString &propertyName) const; \
+    Value get(ExecState *exec, const Identifier &propertyName) const; \
+    bool hasProperty(ExecState *exec, const Identifier &propertyName) const; \
   }; \
   const ClassInfo ClassProto::info = { ClassName, 0, &ClassProto##Table, 0 }; \
   };
 
 #define IMPLEMENT_PROTOTYPE(ClassProto,ClassFunc) \
-    Value KJS::ClassProto::get(ExecState *exec, const UString &propertyName) const \
+    Value KJS::ClassProto::get(ExecState *exec, const Identifier &propertyName) const \
     { \
       /*fprintf( stderr, "%sProto::get(%s) [in macro, no parent]\n", info.className, propertyName.ascii());*/ \
       return lookupGetFunction<ClassFunc,ObjectImp>(exec, propertyName, &ClassProto##Table, this ); \
     } \
-    bool KJS::ClassProto::hasProperty(ExecState *exec, const UString &propertyName) const \
+    bool KJS::ClassProto::hasProperty(ExecState *exec, const Identifier &propertyName) const \
     { /*stupid but we need this to have a common macro for the declaration*/ \
       return ObjectImp::hasProperty(exec, propertyName); \
     }
 
 #define IMPLEMENT_PROTOTYPE_WITH_PARENT(ClassProto,ClassFunc,ParentProto)  \
-    Value KJS::ClassProto::get(ExecState *exec, const UString &propertyName) const \
+    Value KJS::ClassProto::get(ExecState *exec, const Identifier &propertyName) const \
     { \
       /*fprintf( stderr, "%sProto::get(%s) [in macro]\n", info.className, propertyName.ascii());*/ \
       Value val = lookupGetFunction<ClassFunc,ObjectImp>(exec, propertyName, &ClassProto##Table, this ); \
@@ -296,7 +296,7 @@ namespace KJS {
       /* Not found -> forward request to "parent" prototype */ \
       return ParentProto::self(exec).get( exec, propertyName ); \
     } \
-    bool KJS::ClassProto::hasProperty(ExecState *exec, const UString &propertyName) const \
+    bool KJS::ClassProto::hasProperty(ExecState *exec, const Identifier &propertyName) const \
     { \
       if (ObjectImp::hasProperty(exec, propertyName)) \
         return true; \
diff --git a/WebCore/khtml/ecma/kjs_css.cpp b/WebCore/khtml/ecma/kjs_css.cpp
index 9a6d9cb..637c7d4 100644
--- a/WebCore/khtml/ecma/kjs_css.cpp
+++ b/WebCore/khtml/ecma/kjs_css.cpp
@@ -74,7 +74,7 @@ DOMCSSStyleDeclaration::~DOMCSSStyleDeclaration()
   ScriptInterpreter::forgetDOMObject(styleDecl.handle());
 }
 
-bool DOMCSSStyleDeclaration::hasProperty(ExecState *exec, const UString &p) const
+bool DOMCSSStyleDeclaration::hasProperty(ExecState *exec, const Identifier &p) const
 {
   DOM::DOMString cssprop = jsNameToProp(p);
   // strip pos- / pixel- prefix here?
@@ -84,7 +84,7 @@ bool DOMCSSStyleDeclaration::hasProperty(ExecState *exec, const UString &p) cons
   return ObjectImp::hasProperty(exec, p);
 }
 
-Value DOMCSSStyleDeclaration::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMCSSStyleDeclaration::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMCSSStyleDeclaration::tryGet " << propertyName.qstring() << endl;
@@ -147,9 +147,9 @@ Value DOMCSSStyleDeclaration::tryGet(ExecState *exec, const UString &propertyNam
 }
 
 
-void DOMCSSStyleDeclaration::tryPut(ExecState *exec, const UString &pName, const Value& value, int )
+void DOMCSSStyleDeclaration::tryPut(ExecState *exec, const Identifier &pName, const Value& value, int )
 {
-  UString propertyName = pName;
+  Identifier propertyName = pName;
 
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMCSSStyleDeclaration::tryPut " << propertyName.qstring() << endl;
@@ -234,7 +234,7 @@ DOMStyleSheet::~DOMStyleSheet()
   ScriptInterpreter::forgetDOMObject(styleSheet.handle());
 }
 
-Value DOMStyleSheet::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMStyleSheet::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
   return DOMObjectLookupGetValue<DOMStyleSheet,DOMObject>(exec,propertyName,&DOMStyleSheetTable,this);
 }
@@ -260,7 +260,7 @@ Value DOMStyleSheet::getValueProperty(ExecState *exec, int token) const
   return Value();
 }
 
-void DOMStyleSheet::tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr)
+void DOMStyleSheet::tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr)
 {
   if (propertyName == "disabled") {
     styleSheet.setDisabled(value.toBoolean(exec));
@@ -307,7 +307,7 @@ DOMStyleSheetList::~DOMStyleSheetList()
   ScriptInterpreter::forgetDOMObject(styleSheetList.handle());
 }
 
-Value DOMStyleSheetList::tryGet(ExecState *exec, const UString &p) const
+Value DOMStyleSheetList::tryGet(ExecState *exec, const Identifier &p) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMStyleSheetList::tryGet " << p.qstring() << endl;
@@ -413,7 +413,7 @@ DOMMediaList::~DOMMediaList()
   ScriptInterpreter::forgetDOMObject(mediaList.handle());
 }
 
-Value DOMMediaList::tryGet(ExecState *exec, const UString &p) const
+Value DOMMediaList::tryGet(ExecState *exec, const Identifier &p) const
 {
   if (p == "mediaText")
     return getString(mediaList.mediaText());
@@ -428,7 +428,7 @@ Value DOMMediaList::tryGet(ExecState *exec, const UString &p) const
   return DOMObject::tryGet(exec, p);
 }
 
-void DOMMediaList::tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr)
+void DOMMediaList::tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr)
 {
   if (propertyName == "mediaText")
     mediaList.setMediaText(value.toString(exec).string());
@@ -490,7 +490,7 @@ DOMCSSStyleSheet::~DOMCSSStyleSheet()
 {
 }
 
-Value DOMCSSStyleSheet::tryGet(ExecState *exec, const UString &p) const
+Value DOMCSSStyleSheet::tryGet(ExecState *exec, const Identifier &p) const
 {
   DOM::CSSStyleSheet cssStyleSheet = static_cast<DOM::CSSStyleSheet>(styleSheet);
   if (p == "ownerRule")
@@ -541,7 +541,7 @@ DOMCSSRuleList::~DOMCSSRuleList()
   ScriptInterpreter::forgetDOMObject(cssRuleList.handle());
 }
 
-Value DOMCSSRuleList::tryGet(ExecState *exec, const UString &p) const
+Value DOMCSSRuleList::tryGet(ExecState *exec, const Identifier &p) const
 {
   Value result;
   if (p == "length")
@@ -648,7 +648,7 @@ const ClassInfo* DOMCSSRule::classInfo() const
   encoding		DOMCSSRule::Charset_Encoding	DontDelete
 @end
 */
-Value DOMCSSRule::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMCSSRule::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMCSSRule::tryGet " << propertyName.qstring() << endl;
@@ -717,7 +717,7 @@ Value DOMCSSRule::getValueProperty(ExecState *exec, int token) const
   return Undefined();
 }
 
-void DOMCSSRule::tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr)
+void DOMCSSRule::tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr)
 {
   const HashTable* table = classInfo()->propHashTable; // get the right hashtable
   const HashEntry* entry = Lookup::findEntry(table, propertyName);
@@ -812,7 +812,7 @@ const ClassInfo CSSRuleConstructor::info = { "CSSRuleConstructor", 0, &CSSRuleCo
 @end
 */
 
-Value CSSRuleConstructor::tryGet(ExecState *exec, const UString &p) const
+Value CSSRuleConstructor::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<CSSRuleConstructor,DOMObject>(exec,p,&CSSRuleConstructorTable,this);
 }
@@ -858,7 +858,7 @@ DOMCSSValue::~DOMCSSValue()
   ScriptInterpreter::forgetDOMObject(cssValue.handle());
 }
 
-Value DOMCSSValue::tryGet(ExecState *exec, const UString &p) const
+Value DOMCSSValue::tryGet(ExecState *exec, const Identifier &p) const
 {
   if (p == "cssText")
     return getString(cssValue.cssText());
@@ -867,7 +867,7 @@ Value DOMCSSValue::tryGet(ExecState *exec, const UString &p) const
   return DOMObject::tryGet(exec,p);
 }
 
-void DOMCSSValue::tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr)
+void DOMCSSValue::tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr)
 {
   if (propertyName == "cssText")
     cssValue.setCssText(value.toString(exec).string());
@@ -906,7 +906,7 @@ const ClassInfo CSSValueConstructor::info = { "CSSValueConstructor", 0, &CSSValu
   CSS_CUSTOM		CSSValueConstructor::CSS_CUSTOM			DontDelete|ReadOnly
 @end
 */
-Value CSSValueConstructor::tryGet(ExecState *exec, const UString &p) const
+Value CSSValueConstructor::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<CSSValueConstructor,DOMObject>(exec,p,&CSSValueConstructorTable,this);
 }
@@ -955,7 +955,7 @@ IMPLEMENT_PROTOTYPE(DOMCSSPrimitiveValueProto,DOMCSSPrimitiveValueProtoFunc)
 DOMCSSPrimitiveValue::DOMCSSPrimitiveValue(ExecState *exec, DOM::CSSPrimitiveValue v)
   : DOMCSSValue(DOMCSSPrimitiveValueProto::self(exec), v) { }
 
-Value DOMCSSPrimitiveValue::tryGet(ExecState *exec, const UString &p) const
+Value DOMCSSPrimitiveValue::tryGet(ExecState *exec, const Identifier &p) const
 {
   if (p=="primitiveType")
     return Number(static_cast<DOM::CSSPrimitiveValue>(cssValue).primitiveType());
@@ -1027,7 +1027,7 @@ const ClassInfo CSSPrimitiveValueConstructor::info = { "CSSPrimitiveValueConstru
 @end
 */
 
-Value CSSPrimitiveValueConstructor::tryGet(ExecState *exec, const UString &p) const
+Value CSSPrimitiveValueConstructor::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<CSSPrimitiveValueConstructor,CSSValueConstructor>(exec,p,&CSSPrimitiveValueConstructorTable,this);
 }
@@ -1058,7 +1058,7 @@ IMPLEMENT_PROTOFUNC(DOMCSSValueListFunc) // not really a proto, but doesn't matt
 DOMCSSValueList::DOMCSSValueList(ExecState *exec, DOM::CSSValueList v)
   : DOMCSSValue(exec, v) { }
 
-Value DOMCSSValueList::tryGet(ExecState *exec, const UString &p) const
+Value DOMCSSValueList::tryGet(ExecState *exec, const Identifier &p) const
 {
   Value result;
   DOM::CSSValueList valueList = static_cast<DOM::CSSValueList>(cssValue);
@@ -1108,7 +1108,7 @@ DOMRGBColor::~DOMRGBColor()
   //rgbColors.remove(rgbColor.handle());
 }
 
-Value DOMRGBColor::tryGet(ExecState *exec, const UString &p) const
+Value DOMRGBColor::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<DOMRGBColor,DOMObject>(exec, p,
 						       &DOMRGBColorTable,
@@ -1151,7 +1151,7 @@ DOMRect::~DOMRect()
   ScriptInterpreter::forgetDOMObject(rect.handle());
 }
 
-Value DOMRect::tryGet(ExecState *exec, const UString &p) const
+Value DOMRect::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<DOMRect,DOMObject>(exec, p,
 						    &DOMRectTable, this);
@@ -1183,9 +1183,9 @@ Value KJS::getDOMRect(ExecState *exec, DOM::Rect r)
 const ClassInfo DOMCounter::info = { "Counter", 0, &DOMCounterTable, 0 };
 /*
 @begin DOMCounterTable 3
-  identifier	DOMCounter::Identifier	DontDelete|ReadOnly
-  listStyle	DOMCounter::ListStyle	DontDelete|ReadOnly
-  separator	DOMCounter::Separator	DontDelete|ReadOnly
+  identifier	DOMCounter::identifier	DontDelete|ReadOnly
+  listStyle	DOMCounter::listStyle	DontDelete|ReadOnly
+  separator	DOMCounter::separator	DontDelete|ReadOnly
 @end
 */
 DOMCounter::~DOMCounter()
@@ -1193,7 +1193,7 @@ DOMCounter::~DOMCounter()
   ScriptInterpreter::forgetDOMObject(counter.handle());
 }
 
-Value DOMCounter::tryGet(ExecState *exec, const UString &p) const
+Value DOMCounter::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<DOMCounter,DOMObject>(exec, p,
 						       &DOMCounterTable, this);
@@ -1202,11 +1202,11 @@ Value DOMCounter::tryGet(ExecState *exec, const UString &p) const
 Value DOMCounter::getValueProperty(ExecState *, int token) const
 {
   switch (token) {
-  case Identifier:
+  case identifier:
     return getString(counter.identifier());
-  case ListStyle:
+  case listStyle:
     return getString(counter.listStyle());
-  case Separator:
+  case separator:
     return getString(counter.separator());
   default:
     return Value();
diff --git a/WebCore/khtml/ecma/kjs_css.h b/WebCore/khtml/ecma/kjs_css.h
index d5bc6ac..f6b1706 100644
--- a/WebCore/khtml/ecma/kjs_css.h
+++ b/WebCore/khtml/ecma/kjs_css.h
@@ -36,9 +36,9 @@ namespace KJS {
   public:
     DOMCSSStyleDeclaration(ExecState *exec, DOM::CSSStyleDeclaration s);
     virtual ~DOMCSSStyleDeclaration();
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
-    virtual bool hasProperty(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
+    virtual bool hasProperty(ExecState *exec, const Identifier &propertyName) const;
     virtual const ClassInfo *classInfo() const { return &info; }
     static const ClassInfo info;
     enum { CssText, Length, ParentRule,
@@ -58,9 +58,9 @@ namespace KJS {
     // Constructor for inherited classes
     DOMStyleSheet(Object proto, DOM::StyleSheet ss) : DOMObject(proto), styleSheet(ss) { }
     virtual ~DOMStyleSheet();
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
     virtual bool toBoolean(ExecState *) const { return true; }
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
@@ -76,7 +76,7 @@ namespace KJS {
     DOMStyleSheetList(ExecState *, DOM::StyleSheetList ssl, DOM::Document doc)
       : styleSheetList(ssl), m_doc(doc) { }
     virtual ~DOMStyleSheetList();
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
     virtual bool toBoolean(ExecState* ) const { return true; }
@@ -95,8 +95,8 @@ namespace KJS {
   public:
     DOMMediaList(ExecState *, DOM::MediaList ml);
     virtual ~DOMMediaList();
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
     virtual const ClassInfo* classInfo() const { return &info; }
     virtual bool toBoolean(ExecState* ) const { return true; }
     static const ClassInfo info;
@@ -113,7 +113,7 @@ namespace KJS {
   public:
     DOMCSSStyleSheet(ExecState *exec, DOM::CSSStyleSheet ss);
     virtual ~DOMCSSStyleSheet();
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
@@ -126,7 +126,7 @@ namespace KJS {
   public:
     DOMCSSRuleList(ExecState *, DOM::CSSRuleList rl) : cssRuleList(rl) { }
     virtual ~DOMCSSRuleList();
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
@@ -142,9 +142,9 @@ namespace KJS {
   public:
     DOMCSSRule(ExecState *, DOM::CSSRule r) : cssRule(r) { }
     virtual ~DOMCSSRule();
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
     void putValue(ExecState *exec, int token, const Value& value, int attr);
     virtual const ClassInfo* classInfo() const;
     static const ClassInfo info;
@@ -170,7 +170,7 @@ namespace KJS {
   class CSSRuleConstructor : public DOMObject {
   public:
     CSSRuleConstructor(ExecState *) { }
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -185,8 +185,8 @@ namespace KJS {
     DOMCSSValue(ExecState *, DOM::CSSValue v) : cssValue(v) { }
     DOMCSSValue(Object proto, DOM::CSSValue v) : DOMObject(proto), cssValue(v) { }
     virtual ~DOMCSSValue();
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
     enum { CssText, CssValueType };
@@ -200,7 +200,7 @@ namespace KJS {
   class CSSValueConstructor : public DOMObject {
   public:
     CSSValueConstructor(ExecState *) { }
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -213,7 +213,7 @@ namespace KJS {
   class DOMCSSPrimitiveValue : public DOMCSSValue {
   public:
     DOMCSSPrimitiveValue(ExecState *exec, DOM::CSSPrimitiveValue v);
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
@@ -226,7 +226,7 @@ namespace KJS {
   class CSSPrimitiveValueConstructor : public CSSValueConstructor {
   public:
     CSSPrimitiveValueConstructor(ExecState *exec) : CSSValueConstructor(exec) { }
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -238,7 +238,7 @@ namespace KJS {
   class DOMCSSValueList : public DOMCSSValue {
   public:
     DOMCSSValueList(ExecState *exec, DOM::CSSValueList v);
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
@@ -250,7 +250,7 @@ namespace KJS {
   public:
     DOMRGBColor(DOM::RGBColor c) : rgbColor(c) { }
     ~DOMRGBColor();
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -266,7 +266,7 @@ namespace KJS {
   public:
     DOMRect(ExecState *, DOM::Rect r) : rect(r) { }
     ~DOMRect();
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -282,12 +282,12 @@ namespace KJS {
   public:
     DOMCounter(ExecState *, DOM::Counter c) : counter(c) { }
     ~DOMCounter();
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
-    enum { Identifier, ListStyle, Separator };
+    enum { identifier, listStyle, separator };
   protected:
     DOM::Counter counter;
   };
diff --git a/WebCore/khtml/ecma/kjs_dom.cpp b/WebCore/khtml/ecma/kjs_dom.cpp
index c0febb6..21c297d 100644
--- a/WebCore/khtml/ecma/kjs_dom.cpp
+++ b/WebCore/khtml/ecma/kjs_dom.cpp
@@ -140,7 +140,7 @@ bool DOMNode::toBoolean(ExecState *) const
   scrollTop	DOMNode::ScrollTop		DontDelete|ReadOnly
 @end
 */
-Value DOMNode::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMNode::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMNode::tryGet " << propertyName.qstring() << endl;
@@ -286,7 +286,7 @@ Value DOMNode::getValueProperty(ExecState *exec, int token) const
   return Value();
 }
 
-void DOMNode::tryPut(ExecState *exec, const UString& propertyName, const Value& value, int attr)
+void DOMNode::tryPut(ExecState *exec, const Identifier& propertyName, const Value& value, int attr)
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMNode::tryPut " << propertyName.qstring() << endl;
@@ -487,14 +487,14 @@ DOMNodeList::~DOMNodeList()
 
 // We have to implement hasProperty since we don't use a hashtable for 'length' and 'item'
 // ## this breaks "for (..in..)" though.
-bool DOMNodeList::hasProperty(ExecState *exec, const UString &p) const
+bool DOMNodeList::hasProperty(ExecState *exec, const Identifier &p) const
 {
   if (p == "length" || p == "item")
     return true;
   return ObjectImp::hasProperty(exec, p);
 }
 
-Value DOMNodeList::tryGet(ExecState *exec, const UString &p) const
+Value DOMNodeList::tryGet(ExecState *exec, const Identifier &p) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMNodeList::tryGet " << p.ascii() << endl;
@@ -599,7 +599,7 @@ const ClassInfo DOMAttr::info = { "Attr", &DOMNode::info, &DOMAttrTable, 0 };
   ownerElement	DOMAttr::OwnerElement	DontDelete|ReadOnly
 @end
 */
-Value DOMAttr::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMAttr::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMAttr::tryPut " << propertyName.qstring() << endl;
@@ -623,7 +623,7 @@ Value DOMAttr::getValueProperty(ExecState *exec, int token) const
   return Value(); // not reached
 }
 
-void DOMAttr::tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr)
+void DOMAttr::tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr)
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMAttr::tryPut " << propertyName.qstring() << endl;
@@ -693,7 +693,7 @@ DOMDocument::DOMDocument(ExecState *exec, const DOM::Document &d)
 DOMDocument::DOMDocument(const Object &proto, const DOM::Document &d)
   : DOMNode(proto, d) { }
 
-Value DOMDocument::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMDocument::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMDocument::tryGet " << propertyName.qstring() << endl;
@@ -742,7 +742,7 @@ Value DOMDocument::getValueProperty(ExecState *exec, int token) const
   }
 }
 
-void DOMDocument::tryPut(ExecState *exec, const UString& propertyName, const Value& value, int attr)
+void DOMDocument::tryPut(ExecState *exec, const Identifier& propertyName, const Value& value, int attr)
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMDocument::tryPut " << propertyName.qstring() << endl;
@@ -886,7 +886,7 @@ DOMElement::DOMElement(ExecState *exec, const DOM::Element &e)
 DOMElement::DOMElement(const Object &proto, const DOM::Element &e)
   : DOMNode(proto, e) { }
 
-Value DOMElement::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMElement::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMElement::tryGet " << propertyName.qstring() << endl;
@@ -1040,7 +1040,7 @@ const ClassInfo DOMDocumentType::info = { "DocumentType", &DOMNode::info, &DOMDo
 DOMDocumentType::DOMDocumentType(ExecState *exec, const DOM::DocumentType &dt)
   : DOMNode( /*### no proto yet*/exec, dt ) { }
 
-Value DOMDocumentType::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMDocumentType::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
   return DOMObjectLookupGetValue<DOMDocumentType, DOMNode>(exec, propertyName, &DOMDocumentTypeTable, this);
 }
@@ -1097,14 +1097,14 @@ DOMNamedNodeMap::~DOMNamedNodeMap()
 
 // We have to implement hasProperty since we don't use a hashtable for 'length'
 // ## this breaks "for (..in..)" though.
-bool DOMNamedNodeMap::hasProperty(ExecState *exec, const UString &p) const
+bool DOMNamedNodeMap::hasProperty(ExecState *exec, const Identifier &p) const
 {
   if (p == "length")
     return true;
   return DOMObject::hasProperty(exec, p);
 }
 
-Value DOMNamedNodeMap::tryGet(ExecState* exec, const UString &p) const
+Value DOMNamedNodeMap::tryGet(ExecState* exec, const Identifier &p) const
 {
   if (p == "length")
     return Number(map.length());
@@ -1161,7 +1161,7 @@ const ClassInfo DOMProcessingInstruction::info = { "ProcessingInstruction", &DOM
   sheet		DOMProcessingInstruction::Sheet		DontDelete|ReadOnly
 @end
 */
-Value DOMProcessingInstruction::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMProcessingInstruction::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
   return DOMObjectLookupGetValue<DOMProcessingInstruction, DOMNode>(exec, propertyName, &DOMProcessingInstructionTable, this);
 }
@@ -1181,7 +1181,7 @@ Value DOMProcessingInstruction::getValueProperty(ExecState *exec, int token) con
   }
 }
 
-void DOMProcessingInstruction::tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr)
+void DOMProcessingInstruction::tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr)
 {
   // Not worth using the hashtable for this one ;)
   if (propertyName == "data")
@@ -1200,7 +1200,7 @@ const ClassInfo DOMNotation::info = { "Notation", &DOMNode::info, &DOMNotationTa
   systemId		DOMNotation::SystemId	DontDelete|ReadOnly
 @end
 */
-Value DOMNotation::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMNotation::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
   return DOMObjectLookupGetValue<DOMNotation, DOMNode>(exec, propertyName, &DOMNotationTable, this);
 }
@@ -1229,7 +1229,7 @@ const ClassInfo DOMEntity::info = { "Entity", &DOMNode::info, 0, 0 };
   notationName		DOMEntity::NotationName	DontDelete|ReadOnly
 @end
 */
-Value DOMEntity::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMEntity::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
   return DOMObjectLookupGetValue<DOMEntity, DOMNode>(exec, propertyName, &DOMEntityTable, this);
 }
@@ -1343,7 +1343,7 @@ const ClassInfo NodeConstructor::info = { "NodeConstructor", 0, &NodeConstructor
   NOTATION_NODE		DOM::Node::NOTATION_NODE		DontDelete|ReadOnly
 @end
 */
-Value NodeConstructor::tryGet(ExecState *exec, const UString &propertyName) const
+Value NodeConstructor::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
   return DOMObjectLookupGetValue<NodeConstructor, DOMObject>(exec, propertyName, &NodeConstructorTable, this);
 }
@@ -1414,7 +1414,7 @@ const ClassInfo DOMExceptionConstructor::info = { "DOMExceptionConstructor", 0,
 @end
 */
 
-Value DOMExceptionConstructor::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMExceptionConstructor::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
   return DOMObjectLookupGetValue<DOMExceptionConstructor, DOMObject>(exec, propertyName, &DOMExceptionConstructorTable, this);
 }
@@ -1478,7 +1478,7 @@ DOMNamedNodesCollection::DOMNamedNodesCollection(ExecState *, const QValueList<D
   // Maybe we should ref (and deref in the dtor) the nodes, though ?
 }
 
-Value DOMNamedNodesCollection::tryGet(ExecState *exec, const UString &propertyName) const
+Value DOMNamedNodesCollection::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
   if (propertyName == "length")
     return Number(m_nodes.count());
@@ -1519,7 +1519,7 @@ DOMCharacterData::DOMCharacterData(ExecState *exec, const DOM::CharacterData &d)
 DOMCharacterData::DOMCharacterData(const Object &proto, const DOM::CharacterData &d)
  : DOMNode(proto, d) {}
 
-Value DOMCharacterData::tryGet(ExecState *exec, const UString &p) const
+Value DOMCharacterData::tryGet(ExecState *exec, const Identifier &p) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070)<<"DOMCharacterData::tryGet "<<p.string().string()<<endl;
@@ -1541,7 +1541,7 @@ Value DOMCharacterData::getValueProperty(ExecState *, int token) const
   }
 }
 
-void DOMCharacterData::tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr)
+void DOMCharacterData::tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr)
 {
   if (propertyName == "data")
     static_cast<DOM::CharacterData>(node).setData(value.toString(exec).string());
@@ -1597,7 +1597,7 @@ IMPLEMENT_PROTOTYPE_WITH_PARENT(DOMTextProto,DOMTextProtoFunc,DOMCharacterDataPr
 DOMText::DOMText(ExecState *exec, const DOM::Text &t)
   : DOMCharacterData(DOMTextProto::self(exec), t) { }
 
-Value DOMText::tryGet(ExecState *exec, const UString &p) const
+Value DOMText::tryGet(ExecState *exec, const Identifier &p) const
 {
   if (p == "")
     return Undefined(); // ### TODO
diff --git a/WebCore/khtml/ecma/kjs_dom.h b/WebCore/khtml/ecma/kjs_dom.h
index 7758764..7463db4 100644
--- a/WebCore/khtml/ecma/kjs_dom.h
+++ b/WebCore/khtml/ecma/kjs_dom.h
@@ -38,10 +38,10 @@ namespace KJS {
     DOMNode(const Object &proto, const DOM::Node &n);
     ~DOMNode();
     virtual bool toBoolean(ExecState *) const;
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
 
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
     void putValue(ExecState *exec, int token, const Value& value, int attr);
     virtual DOM::Node toNode() const { return node; }
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -74,8 +74,8 @@ namespace KJS {
   public:
     DOMNodeList(ExecState *, const DOM::NodeList &l) : list(l) { }
     ~DOMNodeList();
-    virtual bool hasProperty(ExecState *exec, const UString &p) const;
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     virtual Value call(ExecState *exec, Object &thisObj, const List&args);
     virtual Value tryCall(ExecState *exec, Object &thisObj, const List&args);
     virtual bool implementsCall() const { return true; }
@@ -104,9 +104,9 @@ namespace KJS {
     DOMDocument(ExecState *exec, const DOM::Document &d);
     // Constructor for inherited classes
     DOMDocument(const Object &proto, const DOM::Document &d);
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
     void putValue(ExecState *exec, int token, const Value& value, int attr);
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
@@ -124,8 +124,8 @@ namespace KJS {
   class DOMAttr : public DOMNode {
   public:
     DOMAttr(ExecState *exec, const DOM::Attr &a) : DOMNode(exec, a) { }
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
     Value getValueProperty(ExecState *exec, int token) const;
     void putValue(ExecState *exec, int token, const Value& value, int attr);
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -139,7 +139,7 @@ namespace KJS {
     DOMElement(ExecState *exec, const DOM::Element &e);
     // Constructor for inherited classes
     DOMElement(const Object &proto, const DOM::Element &e);
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
@@ -169,7 +169,7 @@ namespace KJS {
   public:
     // Build a DOMDocumentType
     DOMDocumentType(ExecState *exec, const DOM::DocumentType &dt);
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -181,8 +181,8 @@ namespace KJS {
   public:
     DOMNamedNodeMap(ExecState *, const DOM::NamedNodeMap &m);
     ~DOMNamedNodeMap();
-    virtual bool hasProperty(ExecState *exec, const UString &p) const;
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
     virtual bool toBoolean(ExecState *) const { return true; }
@@ -197,9 +197,9 @@ namespace KJS {
   class DOMProcessingInstruction : public DOMNode {
   public:
     DOMProcessingInstruction(ExecState *exec, const DOM::ProcessingInstruction &pi) : DOMNode(exec, pi) { }
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
     enum { Target, Data, Sheet };
@@ -208,7 +208,7 @@ namespace KJS {
   class DOMNotation : public DOMNode {
   public:
     DOMNotation(ExecState *exec, const DOM::Notation &n) : DOMNode(exec, n) { }
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -219,7 +219,7 @@ namespace KJS {
   class DOMEntity : public DOMNode {
   public:
     DOMEntity(ExecState *exec, const DOM::Entity &e) : DOMNode(exec, e) { }
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -231,7 +231,7 @@ namespace KJS {
   class NodeConstructor : public DOMObject {
   public:
     NodeConstructor(ExecState *) : DOMObject() { }
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -242,7 +242,7 @@ namespace KJS {
   class DOMExceptionConstructor : public DOMObject {
   public:
     DOMExceptionConstructor(ExecState *) : DOMObject() { }
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -261,7 +261,7 @@ namespace KJS {
   class DOMNamedNodesCollection : public DOMObject {
   public:
     DOMNamedNodesCollection(ExecState *exec, const QValueList<DOM::Node>& nodes );
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
   private:
     QValueList<DOM::Node> m_nodes;
   };
@@ -272,9 +272,9 @@ namespace KJS {
     DOMCharacterData(ExecState *exec, const DOM::CharacterData &d);
     // Constructor for inherited classes
     DOMCharacterData(const Object &proto, const DOM::CharacterData &d);
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     Value getValueProperty(ExecState *, int token) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
     DOM::CharacterData toData() const { return static_cast<DOM::CharacterData>(node); }
@@ -285,7 +285,7 @@ namespace KJS {
   class DOMText : public DOMCharacterData {
   public:
     DOMText(ExecState *exec, const DOM::Text &t);
-    virtual Value tryGet(ExecState *exec,const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     Value getValueProperty(ExecState *, int token) const;
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
diff --git a/WebCore/khtml/ecma/kjs_events.cpp b/WebCore/khtml/ecma/kjs_events.cpp
index 1a20c8a..ad9a9aa 100644
--- a/WebCore/khtml/ecma/kjs_events.cpp
+++ b/WebCore/khtml/ecma/kjs_events.cpp
@@ -156,7 +156,7 @@ const ClassInfo EventConstructor::info = { "EventConstructor", 0, &EventConstruc
 @end
 */
 
-Value EventConstructor::tryGet(ExecState *exec, const UString &p) const
+Value EventConstructor::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<EventConstructor, DOMObject>(exec,p,&EventConstructorTable,this);
 }
@@ -206,7 +206,7 @@ DOMEvent::~DOMEvent()
   ScriptInterpreter::forgetDOMObject(event.handle());
 }
 
-Value DOMEvent::tryGet(ExecState *exec, const UString &p) const
+Value DOMEvent::tryGet(ExecState *exec, const Identifier &p) const
 {
 #ifdef KJS_VERBOSE
   kdDebug() << "KJS::DOMEvent::tryGet " << p.qstring() << endl;
@@ -239,7 +239,7 @@ Value DOMEvent::getValueProperty(ExecState *exec, int token) const
   }
 }
 
-void DOMEvent::tryPut(ExecState *exec, const UString &propertyName,
+void DOMEvent::tryPut(ExecState *exec, const Identifier &propertyName,
                       const Value& value, int attr)
 {
   DOMObjectLookupPut<DOMEvent, DOMObject>(exec, propertyName, value, attr,
@@ -325,7 +325,7 @@ const ClassInfo EventExceptionConstructor::info = { "EventExceptionConstructor",
   UNSPECIFIED_EVENT_TYPE_ERR    DOM::EventException::UNSPECIFIED_EVENT_TYPE_ERR DontDelete|ReadOnly
 @end
 */
-Value EventExceptionConstructor::tryGet(ExecState *exec, const UString &p) const
+Value EventExceptionConstructor::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<EventExceptionConstructor, DOMObject>(exec,p,&EventExceptionConstructorTable,this);
 }
@@ -361,7 +361,7 @@ DOMUIEvent::~DOMUIEvent()
 {
 }
 
-Value DOMUIEvent::tryGet(ExecState *exec, const UString &p) const
+Value DOMUIEvent::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<DOMUIEvent,DOMEvent>(exec,p,&DOMUIEventTable,this);
 }
@@ -436,7 +436,7 @@ DOMMouseEvent::~DOMMouseEvent()
 {
 }
 
-Value DOMMouseEvent::tryGet(ExecState *exec, const UString &p) const
+Value DOMMouseEvent::tryGet(ExecState *exec, const Identifier &p) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "DOMMouseEvent::tryGet " << p.qstring() << endl;
@@ -550,7 +550,7 @@ const ClassInfo MutationEventConstructor::info = { "MutationEventConstructor", 0
   REMOVAL	DOM::MutationEvent::REMOVAL		DontDelete|ReadOnly
 @end
 */
-Value MutationEventConstructor::tryGet(ExecState *exec, const UString &p) const
+Value MutationEventConstructor::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<MutationEventConstructor,DOMObject>(exec,p,&MutationEventConstructorTable,this);
 }
@@ -589,7 +589,7 @@ DOMMutationEvent::~DOMMutationEvent()
 {
 }
 
-Value DOMMutationEvent::tryGet(ExecState *exec, const UString &p) const
+Value DOMMutationEvent::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<DOMMutationEvent,DOMEvent>(exec,p,&DOMMutationEventTable,this);
 }
diff --git a/WebCore/khtml/ecma/kjs_events.h b/WebCore/khtml/ecma/kjs_events.h
index 2dbdfbf..39479ba 100644
--- a/WebCore/khtml/ecma/kjs_events.h
+++ b/WebCore/khtml/ecma/kjs_events.h
@@ -48,7 +48,7 @@ namespace KJS {
   class EventConstructor : public DOMObject {
   public:
     EventConstructor(ExecState *) { }
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     Value getValueProperty(ExecState *, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -61,9 +61,9 @@ namespace KJS {
   public:
     DOMEvent(ExecState *exec, DOM::Event e);
     ~DOMEvent();
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     Value getValueProperty(ExecState *, int token) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName,
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName,
 			const Value& value, int attr = None);
     void putValue(ExecState *exec, int token, const Value& value, int);
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -88,7 +88,7 @@ namespace KJS {
   class EventExceptionConstructor : public DOMObject {
   public:
     EventExceptionConstructor(ExecState *) { }
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     Value getValueProperty(ExecState *, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -101,7 +101,7 @@ namespace KJS {
   public:
     DOMUIEvent(ExecState *exec, DOM::UIEvent ue) : DOMEvent(exec, ue) {}
     ~DOMUIEvent();
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     Value getValueProperty(ExecState *, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -114,7 +114,7 @@ namespace KJS {
   public:
     DOMMouseEvent(ExecState *exec, DOM::MouseEvent me) : DOMUIEvent(exec, me) {}
     ~DOMMouseEvent();
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     Value getValueProperty(ExecState *, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -130,7 +130,7 @@ namespace KJS {
   class MutationEventConstructor : public DOMObject {
   public:
     MutationEventConstructor(ExecState *) { }
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     Value getValueProperty(ExecState *, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -143,7 +143,7 @@ namespace KJS {
   public:
     DOMMutationEvent(ExecState *exec, DOM::MutationEvent me) : DOMEvent(exec, me) {}
     ~DOMMutationEvent();
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     Value getValueProperty(ExecState *, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
diff --git a/WebCore/khtml/ecma/kjs_html.cpp b/WebCore/khtml/ecma/kjs_html.cpp
index 2c58de6..038da03 100644
--- a/WebCore/khtml/ecma/kjs_html.cpp
+++ b/WebCore/khtml/ecma/kjs_html.cpp
@@ -134,7 +134,7 @@ const ClassInfo KJS::HTMLDocument::info =
 # ids
 @end
 */
-bool KJS::HTMLDocument::hasProperty(ExecState *exec, const UString &p) const
+bool KJS::HTMLDocument::hasProperty(ExecState *exec, const Identifier &p) const
 {
 #ifdef KJS_VERBOSE
   //kdDebug(6070) << "KJS::HTMLDocument::hasProperty " << p.qstring() << endl;
@@ -145,7 +145,7 @@ bool KJS::HTMLDocument::hasProperty(ExecState *exec, const UString &p) const
   return DOMDocument::hasProperty(exec, p);
 }
 
-Value KJS::HTMLDocument::tryGet(ExecState *exec, const UString &propertyName) const
+Value KJS::HTMLDocument::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "KJS::HTMLDocument::tryGet " << propertyName.qstring() << endl;
@@ -264,7 +264,7 @@ Value KJS::HTMLDocument::tryGet(ExecState *exec, const UString &propertyName) co
   return Undefined();
 }
 
-void KJS::HTMLDocument::tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr)
+void KJS::HTMLDocument::tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr)
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "KJS::HTMLDocument::tryPut " << propertyName.qstring() << endl;
@@ -972,7 +972,7 @@ const ClassInfo* KJS::HTMLElement::classInfo() const
 @end
 */
 
-Value KJS::HTMLElement::tryGet(ExecState *exec, const UString &propertyName) const
+Value KJS::HTMLElement::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
   DOM::HTMLElement element = static_cast<DOM::HTMLElement>(node);
 #ifdef KJS_VERBOSE
@@ -1698,7 +1698,7 @@ Value KJS::HTMLElement::getValueProperty(ExecState *exec, int token) const
   return Undefined();
 }
 
-bool KJS::HTMLElement::hasProperty(ExecState *exec, const UString &propertyName) const
+bool KJS::HTMLElement::hasProperty(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   //kdDebug(6070) << "HTMLElement::hasProperty " << propertyName.qstring() << endl;
@@ -1911,7 +1911,7 @@ Value KJS::HTMLElementFunction::tryCall(ExecState *exec, Object &thisObj, const
   return Undefined();
 }
 
-void KJS::HTMLElement::tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr)
+void KJS::HTMLElement::tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr)
 {
 #ifdef KJS_VERBOSE
   DOM::DOMString str = value.isA(NullType) ? DOM::DOMString() : value.toString(exec).string();
@@ -2653,14 +2653,14 @@ HTMLCollection::~HTMLCollection()
 
 // We have to implement hasProperty since we don't use a hashtable for 'selectedIndex' and 'length'
 // ## this breaks "for (..in..)" though.
-bool KJS::HTMLCollection::hasProperty(ExecState *exec, const UString &p) const
+bool KJS::HTMLCollection::hasProperty(ExecState *exec, const Identifier &p) const
 {
   if (p == "selectedIndex" || p == "length")
     return true;
   return DOMObject::hasProperty(exec, p);
 }
 
-Value KJS::HTMLCollection::tryGet(ExecState *exec, const UString &propertyName) const
+Value KJS::HTMLCollection::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug() << "KJS::HTMLCollection::tryGet " << propertyName.ascii() << endl;
@@ -2757,7 +2757,7 @@ Value KJS::HTMLCollection::tryCall(ExecState *exec, Object &, const List &args)
   return Undefined();
 }
 
-Value KJS::HTMLCollection::getNamedItems(ExecState *exec, const UString &propertyName) const
+Value KJS::HTMLCollection::getNamedItems(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "KJS::HTMLCollection::getNamedItems " << propertyName.ascii() << endl;
@@ -2829,13 +2829,13 @@ Value KJS::HTMLCollectionProtoFunc::tryCall(ExecState *exec, Object &thisObj, co
     return getDOMNodeList(exec, list);
   }
   case KJS::HTMLCollection::NamedItem:
-    return static_cast<HTMLCollection *>(thisObj.imp())->getNamedItems(exec,args[0].toString(exec).string());
+    return static_cast<HTMLCollection *>(thisObj.imp())->getNamedItems(exec, args[0].toString(exec));
   default:
     return Undefined();
   }
 }
 
-Value KJS::HTMLSelectCollection::tryGet(ExecState *exec, const UString &p) const
+Value KJS::HTMLSelectCollection::tryGet(ExecState *exec, const Identifier &p) const
 {
   if (p == "selectedIndex")
     return Number(element.selectedIndex());
@@ -2843,7 +2843,7 @@ Value KJS::HTMLSelectCollection::tryGet(ExecState *exec, const UString &p) const
   return  HTMLCollection::tryGet(exec, p);
 }
 
-void KJS::HTMLSelectCollection::tryPut(ExecState *exec, const UString &propertyName, const Value& value, int)
+void KJS::HTMLSelectCollection::tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int)
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "KJS::HTMLSelectCollection::tryPut " << propertyName.qstring() << endl;
@@ -2973,7 +2973,7 @@ const ClassInfo KJS::Image::info = { "Image", 0, &ImageTable, 0 };
 @end
 */
 
-Value Image::tryGet(ExecState *exec, const UString &propertyName) const
+Value Image::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
   return DOMObjectLookupGetValue<Image,DOMObject>(exec, propertyName, &ImageTable, this);
 }
@@ -2991,7 +2991,7 @@ Value Image::getValueProperty(ExecState *, int token) const
   }
 }
 
-void Image::tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr)
+void Image::tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr)
 {
   // Not worth using the hashtable
   if (propertyName == "src") {
diff --git a/WebCore/khtml/ecma/kjs_html.h b/WebCore/khtml/ecma/kjs_html.h
index 0c34548..660180d 100644
--- a/WebCore/khtml/ecma/kjs_html.h
+++ b/WebCore/khtml/ecma/kjs_html.h
@@ -39,10 +39,10 @@ namespace KJS {
   class HTMLDocument : public DOMDocument {
   public:
     HTMLDocument(ExecState *exec, const DOM::HTMLDocument &d) : DOMDocument(exec, d) { }
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
     void putValue(ExecState *exec, int token, const Value& value, int /*attr*/);
-    virtual bool hasProperty(ExecState *exec, const UString &propertyName) const;
+    virtual bool hasProperty(ExecState *exec, const Identifier &propertyName) const;
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
     enum { Title, Referrer, Domain, URL, Body, Location, Cookie,
@@ -55,11 +55,11 @@ namespace KJS {
   class HTMLElement : public DOMElement {
   public:
     HTMLElement(ExecState *exec, const DOM::HTMLElement &e) : DOMElement(exec, e) { }
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
     void putValue(ExecState *exec, int token, const Value& value, int);
-    virtual bool hasProperty(ExecState *exec, const UString &propertyName) const;
+    virtual bool hasProperty(ExecState *exec, const Identifier &propertyName) const;
     virtual UString toString(ExecState *exec) const;
     virtual List eventHandlerScope(ExecState *exec) const;
     virtual const ClassInfo* classInfo() const;
@@ -163,14 +163,14 @@ namespace KJS {
   public:
     HTMLCollection(ExecState *exec, const DOM::HTMLCollection &c);
     ~HTMLCollection();
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     virtual Value call(ExecState *exec, Object &thisObj, const List&args);
     virtual Value tryCall(ExecState *exec, Object &thisObj, const List&args);
     virtual bool implementsCall() const { return true; }
     virtual bool toBoolean(ExecState *) const { return true; }
-    virtual bool hasProperty(ExecState *exec, const UString &p) const;
+    virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
     enum { Item, NamedItem, Tags };
-    Value getNamedItems(ExecState *exec, const UString &propertyName) const;
+    Value getNamedItems(ExecState *exec, const Identifier &propertyName) const;
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
     DOM::HTMLCollection toCollection() const { return collection; }
@@ -182,8 +182,8 @@ namespace KJS {
   public:
     HTMLSelectCollection(ExecState *exec, const DOM::HTMLCollection &c, const DOM::HTMLSelectElement &e)
       : HTMLCollection(exec, c), element(e) { }
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
   private:
     DOM::HTMLSelectElement element;
   };
@@ -214,9 +214,9 @@ namespace KJS {
   public:
     Image(const DOM::Document &d);
     ~Image();
-    virtual Value tryGet(ExecState *exec, const UString &propertyName) const;
+    virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None);
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
     virtual bool toBoolean(ExecState *) const { return true; }
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
diff --git a/WebCore/khtml/ecma/kjs_navigator.cpp b/WebCore/khtml/ecma/kjs_navigator.cpp
index 3304dd7..bb8dfca 100644
--- a/WebCore/khtml/ecma/kjs_navigator.cpp
+++ b/WebCore/khtml/ecma/kjs_navigator.cpp
@@ -78,7 +78,7 @@ namespace KJS {
     class Plugins : public PluginBase {
     public:
         Plugins(ExecState *exec) : PluginBase(exec) {};
-        virtual Value get(ExecState *exec, const UString &propertyName) const;
+        virtual Value get(ExecState *exec, const Identifier &propertyName) const;
         virtual const ClassInfo* classInfo() const { return &info; }
         static const ClassInfo info;
     private:
@@ -89,7 +89,7 @@ namespace KJS {
     class MimeTypes : public PluginBase {
     public:
         MimeTypes(ExecState *exec) : PluginBase(exec) { };
-        virtual Value get(ExecState *exec, const UString &propertyName) const;
+        virtual Value get(ExecState *exec, const Identifier &propertyName) const;
         virtual const ClassInfo* classInfo() const { return &info; }
         static const ClassInfo info;
     private:
@@ -109,7 +109,7 @@ namespace KJS {
           : ObjectImp(exec->interpreter()->builtinObjectPrototype() )
         { m_info = info; };
 #endif
-        virtual Value get(ExecState *exec, const UString &propertyName) const;
+        virtual Value get(ExecState *exec, const Identifier &propertyName) const;
         virtual const ClassInfo* classInfo() const { return &info; }
         static const ClassInfo info;
     private:
@@ -130,7 +130,7 @@ namespace KJS {
           : ObjectImp(exec->interpreter()->builtinObjectPrototype() )
         { m_info = info; };
 #endif
-        virtual Value get(ExecState *exec, const UString &propertyName) const;
+        virtual Value get(ExecState *exec, const Identifier &propertyName) const;
         virtual const ClassInfo* classInfo() const { return &info; }
         static const ClassInfo info;
     private:
@@ -167,7 +167,7 @@ IMPLEMENT_PROTOFUNC(NavigatorFunc)
 Navigator::Navigator(ExecState *exec, KHTMLPart *p)
   : ObjectImp(exec->interpreter()->builtinObjectPrototype()), m_part(p) { }
 
-Value Navigator::get(ExecState *exec, const UString &propertyName) const
+Value Navigator::get(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "Navigator::get " << propertyName.ascii() << endl;
@@ -366,7 +366,7 @@ void PluginBase::unref()
 /*******************************************************************/
 IMPLEMENT_PROTOFUNC(PluginsFunc)
 
-Value Plugins::get(ExecState *exec, const UString &propertyName) const
+Value Plugins::get(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "Plugins::get " << propertyName.qstring() << endl;
@@ -395,7 +395,7 @@ Value Plugins::get(ExecState *exec, const UString &propertyName) const
 
 /*******************************************************************/
 
-Value MimeTypes::get(ExecState *exec, const UString &propertyName) const
+Value MimeTypes::get(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "MimeTypes::get " << propertyName.qstring() << endl;
@@ -425,7 +425,7 @@ Value MimeTypes::get(ExecState *exec, const UString &propertyName) const
 
 /************************************************************************/
 
-Value Plugin::get(ExecState *exec, const UString &propertyName) const
+Value Plugin::get(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "Plugin::get " << propertyName.qstring() << endl;
@@ -465,7 +465,7 @@ Value Plugin::get(ExecState *exec, const UString &propertyName) const
 
 /*****************************************************************************/
 
-Value MimeType::get(ExecState *exec, const UString &propertyName) const
+Value MimeType::get(ExecState *exec, const Identifier &propertyName) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "MimeType::get " << propertyName.qstring() << endl;
diff --git a/WebCore/khtml/ecma/kjs_navigator.h b/WebCore/khtml/ecma/kjs_navigator.h
index bd306e9..5a930ec 100644
--- a/WebCore/khtml/ecma/kjs_navigator.h
+++ b/WebCore/khtml/ecma/kjs_navigator.h
@@ -30,7 +30,7 @@ namespace KJS {
   class Navigator : public ObjectImp {
   public:
     Navigator(ExecState *exec, KHTMLPart *p);
-    virtual Value get(ExecState *exec, const UString &propertyName) const;
+    virtual Value get(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
diff --git a/WebCore/khtml/ecma/kjs_range.cpp b/WebCore/khtml/ecma/kjs_range.cpp
index bcf27a5..84e4723 100644
--- a/WebCore/khtml/ecma/kjs_range.cpp
+++ b/WebCore/khtml/ecma/kjs_range.cpp
@@ -69,7 +69,7 @@ DOMRange::~DOMRange()
   ScriptInterpreter::forgetDOMObject(range.handle());
 }
 
-Value DOMRange::tryGet(ExecState *exec, const UString &p) const
+Value DOMRange::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<DOMRange,DOMObject>(exec,p,&DOMRangeTable,this);
 }
@@ -196,7 +196,7 @@ const ClassInfo RangeConstructor::info = { "RangeConstructor", 0, &RangeConstruc
   END_TO_START		DOM::Range::END_TO_START	DontDelete|ReadOnly
 @end
 */
-Value RangeConstructor::tryGet(ExecState *exec, const UString &p) const
+Value RangeConstructor::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<RangeConstructor,DOMObject>(exec,p,&RangeConstructorTable,this);
 }
diff --git a/WebCore/khtml/ecma/kjs_range.h b/WebCore/khtml/ecma/kjs_range.h
index 476ab57..b5a2ac5 100644
--- a/WebCore/khtml/ecma/kjs_range.h
+++ b/WebCore/khtml/ecma/kjs_range.h
@@ -30,7 +30,7 @@ namespace KJS {
   public:
     DOMRange(ExecState *exec, DOM::Range r);
     ~DOMRange();
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -51,7 +51,7 @@ namespace KJS {
   class RangeConstructor : public DOMObject {
   public:
     RangeConstructor(ExecState *) { }
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     Value getValueProperty(ExecState *, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
diff --git a/WebCore/khtml/ecma/kjs_traversal.cpp b/WebCore/khtml/ecma/kjs_traversal.cpp
index 5d60b91..408d9cd 100644
--- a/WebCore/khtml/ecma/kjs_traversal.cpp
+++ b/WebCore/khtml/ecma/kjs_traversal.cpp
@@ -57,7 +57,7 @@ DOMNodeIterator::~DOMNodeIterator()
   ScriptInterpreter::forgetDOMObject(nodeIterator.handle());
 }
 
-Value DOMNodeIterator::tryGet(ExecState *exec, const UString &p) const
+Value DOMNodeIterator::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<DOMNodeIterator,DOMObject>(exec,p,&DOMNodeIteratorTable,this);
 }
@@ -129,7 +129,7 @@ const ClassInfo NodeFilterConstructor::info = { "NodeFilterConstructor", 0, &Nod
   SHOW_NOTATION		DOM::NodeFilter::SHOW_NOTATION	DontDelete|ReadOnly
 @end
 */
-Value NodeFilterConstructor::tryGet(ExecState *exec, const UString &p) const
+Value NodeFilterConstructor::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<NodeFilterConstructor,DOMObject>(exec,p,&NodeFilterConstructorTable,this);
 }
@@ -218,7 +218,7 @@ DOMTreeWalker::~DOMTreeWalker()
   ScriptInterpreter::forgetDOMObject(treeWalker.handle());
 }
 
-Value DOMTreeWalker::tryGet(ExecState *exec, const UString &p) const
+Value DOMTreeWalker::tryGet(ExecState *exec, const Identifier &p) const
 {
   return DOMObjectLookupGetValue<DOMTreeWalker,DOMObject>(exec,p,&DOMTreeWalkerTable,this);
 }
@@ -243,7 +243,7 @@ Value DOMTreeWalker::getValueProperty(ExecState *exec, int token) const
   }
 }
 
-void DOMTreeWalker::tryPut(ExecState *exec, const UString &propertyName,
+void DOMTreeWalker::tryPut(ExecState *exec, const Identifier &propertyName,
                            const Value& value, int attr)
 {
   if (propertyName == "currentNode") {
diff --git a/WebCore/khtml/ecma/kjs_traversal.h b/WebCore/khtml/ecma/kjs_traversal.h
index a47b887..d8cc376 100644
--- a/WebCore/khtml/ecma/kjs_traversal.h
+++ b/WebCore/khtml/ecma/kjs_traversal.h
@@ -30,7 +30,7 @@ namespace KJS {
   public:
     DOMNodeIterator(ExecState *exec, DOM::NodeIterator ni);
     ~DOMNodeIterator();
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -46,7 +46,7 @@ namespace KJS {
   class NodeFilterConstructor : public DOMObject {
   public:
     NodeFilterConstructor(ExecState *) { }
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -70,9 +70,9 @@ namespace KJS {
   public:
     DOMTreeWalker(ExecState *exec, DOM::TreeWalker tw);
     ~DOMTreeWalker();
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     Value getValueProperty(ExecState *exec, int token) const;
-    virtual void tryPut(ExecState *exec, const UString &propertyName,
+    virtual void tryPut(ExecState *exec, const Identifier &propertyName,
                         const Value& value, int attr = None);
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
diff --git a/WebCore/khtml/ecma/kjs_views.cpp b/WebCore/khtml/ecma/kjs_views.cpp
index 880b534..d88cbdc 100644
--- a/WebCore/khtml/ecma/kjs_views.cpp
+++ b/WebCore/khtml/ecma/kjs_views.cpp
@@ -40,7 +40,7 @@ DOMAbstractView::~DOMAbstractView()
   ScriptInterpreter::forgetDOMObject(abstractView.handle());
 }
 
-Value DOMAbstractView::tryGet(ExecState *exec, const UString &p) const
+Value DOMAbstractView::tryGet(ExecState *exec, const Identifier &p) const
 {
   if ( p == "document" )
     return getDOMNode(exec,abstractView.document());
diff --git a/WebCore/khtml/ecma/kjs_views.h b/WebCore/khtml/ecma/kjs_views.h
index 9029182..da21fdf 100644
--- a/WebCore/khtml/ecma/kjs_views.h
+++ b/WebCore/khtml/ecma/kjs_views.h
@@ -31,7 +31,7 @@ namespace KJS {
   public:
     DOMAbstractView(ExecState *, DOM::AbstractView av) : abstractView(av) {}
     ~DOMAbstractView();
-    virtual Value tryGet(ExecState *exec,const UString &p) const;
+    virtual Value tryGet(ExecState *exec,const Identifier &p) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
diff --git a/WebCore/khtml/ecma/kjs_window.cpp b/WebCore/khtml/ecma/kjs_window.cpp
index 378e08b..2666972 100644
--- a/WebCore/khtml/ecma/kjs_window.cpp
+++ b/WebCore/khtml/ecma/kjs_window.cpp
@@ -64,7 +64,7 @@ namespace KJS {
   public:
     History(ExecState *exec, KHTMLPart *p)
       : ObjectImp(exec->interpreter()->builtinObjectPrototype()), part(p) { }
-    virtual Value get(ExecState *exec, const UString &propertyName) const;
+    virtual Value get(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;
@@ -77,7 +77,7 @@ namespace KJS {
   public:
     FrameArray(ExecState *exec, KHTMLPart *p)
       : ObjectImp(exec->interpreter()->builtinObjectPrototype()), part(p) { }
-    virtual Value get(ExecState *exec, const UString &propertyName) const;
+    virtual Value get(ExecState *exec, const Identifier &propertyName) const;
   private:
     QGuardedPtr<KHTMLPart> part;
   };
@@ -120,7 +120,7 @@ const ClassInfo Screen::info = { "Screen", 0, &ScreenTable, 0 };
 Screen::Screen(ExecState *exec)
   : ObjectImp(exec->interpreter()->builtinObjectPrototype()) {}
 
-Value Screen::get(ExecState *exec, const UString &p) const
+Value Screen::get(ExecState *exec, const Identifier &p) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "Screen::get " << p.qstring() << endl;
@@ -339,7 +339,7 @@ void Window::mark()
     loc->mark();
 }
 
-bool Window::hasProperty(ExecState * /*exec*/, const UString &/*p*/) const
+bool Window::hasProperty(ExecState * /*exec*/, const Identifier &/*p*/) const
 {
   //fprintf( stderr, "Window::hasProperty: always saying true\n" );
 
@@ -354,7 +354,7 @@ UString Window::toString(ExecState *) const
   return "[object Window]";
 }
 
-Value Window::get(ExecState *exec, const UString &p) const
+Value Window::get(ExecState *exec, const Identifier &p) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "Window("<<this<<")::get " << p.qstring() << endl;
@@ -688,7 +688,7 @@ Value Window::get(ExecState *exec, const UString &p) const
   return Undefined();
 }
 
-void Window::put(ExecState* exec, const UString &propertyName, const Value &value, int attr)
+void Window::put(ExecState* exec, const Identifier &propertyName, const Value &value, int attr)
 {
   // Called by an internal KJS call (e.g. InterpreterImp's constructor) ?
   // If yes, save time and jump directly to ObjectImp.
@@ -843,7 +843,7 @@ bool Window::toBoolean(ExecState *) const
   return !m_part.isNull();
 }
 
-int Window::installTimeout(const UString &handler, int t, bool singleShot)
+int Window::installTimeout(const Identifier &handler, int t, bool singleShot)
 {
   return winq->installTimeout(handler, t, singleShot);
 }
@@ -1452,7 +1452,7 @@ void WindowQObject::parentDestroyed()
   scheduledActions.clear();
 }
 
-int WindowQObject::installTimeout(const UString &handler, int t, bool singleShot)
+int WindowQObject::installTimeout(const Identifier &handler, int t, bool singleShot)
 {
   //kdDebug(6070) << "WindowQObject::installTimeout " << this << " " << handler.ascii() << endl;
   int id = startTimer(t);
@@ -1520,7 +1520,7 @@ void WindowQObject::timeoutClose()
   }
 }
 
-Value FrameArray::get(ExecState *exec, const UString &p) const
+Value FrameArray::get(ExecState *exec, const Identifier &p) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "FrameArray::get " << p.qstring() << " part=" << (void*)part << endl;
@@ -1589,7 +1589,7 @@ Location::~Location()
   //kdDebug(6070) << "Location::~Location " << this << " m_part=" << (void*)m_part << endl;
 }
 
-Value Location::get(ExecState *exec, const UString &p) const
+Value Location::get(ExecState *exec, const Identifier &p) const
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "Location::get " << p.qstring() << " m_part=" << (void*)m_part << endl;
@@ -1648,7 +1648,7 @@ Value Location::get(ExecState *exec, const UString &p) const
   return Undefined();
 }
 
-void Location::put(ExecState *exec, const UString &p, const Value &v, int attr)
+void Location::put(ExecState *exec, const Identifier &p, const Value &v, int attr)
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "Location::put " << p.qstring() << " m_part=" << (void*)m_part << endl;
@@ -1759,7 +1759,7 @@ const ClassInfo History::info = { "History", 0, 0, 0 };
 */
 IMPLEMENT_PROTOFUNC(HistoryFunc)
 
-Value History::get(ExecState *exec, const UString &p) const
+Value History::get(ExecState *exec, const Identifier &p) const
 {
   return lookupGet<HistoryFunc,History,ObjectImp>(exec,p,&HistoryTable,this);
 }
@@ -1851,14 +1851,14 @@ Value HistoryFunc::tryCall(ExecState *exec, Object &thisObj, const List &args)
 
 const ClassInfo Konqueror::info = { "Konqueror", 0, 0, 0 };
 
-bool Konqueror::hasProperty(ExecState *exec, const UString &p) const
+bool Konqueror::hasProperty(ExecState *exec, const Identifier &p) const
 {
   if ( p.qstring().startsWith( "goHistory" ) ) return false;
 
   return true;
 }
 
-Value Konqueror::get(ExecState *exec, const UString &p) const
+Value Konqueror::get(ExecState *exec, const Identifier &p) const
 {
   if ( p == "goHistory" || part->url().protocol() != "http" || part->url().host() != "localhost" )
     return Undefined();
diff --git a/WebCore/khtml/ecma/kjs_window.h b/WebCore/khtml/ecma/kjs_window.h
index 74ba384..027e3ce 100644
--- a/WebCore/khtml/ecma/kjs_window.h
+++ b/WebCore/khtml/ecma/kjs_window.h
@@ -48,7 +48,7 @@ namespace KJS {
       Height, Width, ColorDepth, PixelDepth, AvailLeft, AvailTop, AvailHeight,
       AvailWidth
     };
-    virtual Value get(ExecState *exec, const UString &propertyName) const;
+    virtual Value get(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
   private:
     KHTMLView *view;
@@ -83,11 +83,11 @@ namespace KJS {
     static Window *retrieveActive(ExecState *exec);
     QGuardedPtr<KHTMLPart> part() const { return m_part; }
     virtual void mark();
-    virtual bool hasProperty(ExecState *exec, const UString &p) const;
-    virtual Value get(ExecState *exec, const UString &propertyName) const;
-    virtual void put(ExecState *exec, const UString &propertyName, const Value &value, int attr = None);
+    virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
+    virtual Value get(ExecState *exec, const Identifier &propertyName) const;
+    virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
     virtual bool toBoolean(ExecState *exec) const;
-    int installTimeout(const UString &handler, int t, bool singleShot);
+    int installTimeout(const Identifier &handler, int t, bool singleShot);
     void clearTimeout(int timerId);
     void scheduleClose();
     bool isSafeScript(ExecState *exec) const;
@@ -152,7 +152,7 @@ namespace KJS {
   public:
     WindowQObject(Window *w);
     ~WindowQObject();
-    int installTimeout(const UString &handler, int t, bool singleShot);
+    int installTimeout(const Identifier &handler, int t, bool singleShot);
     int installTimeout(const Value &func, List args, int t, bool singleShot);
     void clearTimeout(int timerId, bool delAction = true);
   public slots:
@@ -170,8 +170,8 @@ namespace KJS {
   class Location : public ObjectImp {
   public:
     ~Location();
-    virtual Value get(ExecState *exec, const UString &propertyName) const;
-    virtual void put(ExecState *exec, const UString &propertyName, const Value &value, int attr = None);
+    virtual Value get(ExecState *exec, const Identifier &propertyName) const;
+    virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
     virtual Value toPrimitive(ExecState *exec, Type preferred) const;
     virtual UString toString(ExecState *exec) const;
     enum { Hash, Href, Hostname, Host, Pathname, Port, Protocol, Search, EqualEqual,
@@ -190,8 +190,8 @@ namespace KJS {
     friend class KonquerorFunc;
   public:
     Konqueror(KHTMLPart *p) : part(p) { }
-    virtual Value get(ExecState *exec, const UString &propertyName) const;
-    virtual bool hasProperty(ExecState *exec, const UString &p) const;
+    virtual Value get(ExecState *exec, const Identifier &propertyName) const;
+    virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
     virtual UString toString(ExecState *exec) const;
     virtual const ClassInfo* classInfo() const { return &info; }
     static const ClassInfo info;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list