[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:06:31 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 36614a72a76cc25524e6eedebe8158070b3896bc
Author: darin <darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Nov 22 06:59:09 2002 +0000

    top level:
    
            * Site/Internal/Design/CFURL.rtf: Added.
    
    Tools:
    
            * Scripts/last-update: Added. Script for Trey that tells you when
    	you last did a cvs update, based on most-recently updated ChangeLog.
    
    JavaScriptCore:
    
    	- stop garbage collecting the ActivationImp objects, gets 3% on iBench
    	- pave the way to separate the argument lists from scope chains
    
            * kjs/context.h: Added. Moved ContextImp here so it can use things defined
    	in function.h
    
            * kjs/scope_chain.h: Added. Starting as a copy of List, to be improved.
            * kjs/scope_chain.cpp: Added. Starting as a copy of List, to be improved.
    
            * JavaScriptCore.pbproj/project.pbxproj: Rearranged things, added context.h.
    
            * kjs/function.cpp:
            (FunctionImp::call): Pass InterpreterImp, not ExecState, to ContextImp.
            (DeclaredFunctionImp::DeclaredFunctionImp): List -> ScopeChain.
            (ActivationImp::createArgumentsObject): ArgumentList -> List.
            (GlobalFuncImp::call): Pass InterpreterImp, not an ExecState, to ContextImp.
            * kjs/function.h: List -> ScopeChain.
            * kjs/function_object.cpp: (FunctionObjectImp::construct): List -> ScopeChain.
            * kjs/internal.cpp:
            (ContextImp::ContextImp): Set the context in the interpreter.
            (ContextImp::~ContextImp): Set the context in the interpreter to the caller.
            (ContextImp::mark): Mark all the activation objects.
            (InterpreterImp::InterpreterImp): Initialize context to 0.
            (InterpreterImp::mark): Mark the top context.
            (InterpreterImp::evaluate): Pass InterpreterImp to ContextImp.
            * kjs/internal.h: Move ContextImp to its own header. Add setContext to InterpreterImp.
            * kjs/interpreter.cpp: (Context::scopeChain): List -> ScopeChain.
            * kjs/interpreter.h: List -> ScopeChain.
            * kjs/nodes.cpp:
            (ResolveNode::evaluateReference): List -> ScopeChain.
            (FuncDeclNode::processFuncDecl): List -> ScopeChain.
            (FuncExprNode::evaluate): List -> ScopeChain.
            * kjs/object.cpp: List -> ScopeChain.
            * kjs/object.h: List -> ScopeChain.
    
            * kjs/types.h: Remove needsMarking features from List.
            * kjs/types.cpp: Ditto.
    
    WebCore:
    
            * khtml/ecma/kjs_dom.cpp: (DOMNode::eventHandlerScope): List -> ScopeChain.
            * khtml/ecma/kjs_dom.h: List -> ScopeChain.
            * khtml/ecma/kjs_events.cpp: (JSEventListener::handleEvent): List -> ScopeChain.
            * khtml/ecma/kjs_html.cpp: (KJS::HTMLElement::eventHandlerScope): List -> ScopeChain.
            * khtml/ecma/kjs_html.h: List -> ScopeChain.
    
            * force-js-clean-timestamp: Not sure this is required, but better safe than sorry.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2821 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index 976a712..dbab786 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,3 +1,43 @@
+2002-11-21  Darin Adler  <darin at apple.com>
+
+	- stop garbage collecting the ActivationImp objects, gets 3% on iBench
+	- pave the way to separate the argument lists from scope chains
+
+        * kjs/context.h: Added. Moved ContextImp here so it can use things defined
+	in function.h
+
+        * kjs/scope_chain.h: Added. Starting as a copy of List, to be improved.
+        * kjs/scope_chain.cpp: Added. Starting as a copy of List, to be improved.
+
+        * JavaScriptCore.pbproj/project.pbxproj: Rearranged things, added context.h.
+
+        * kjs/function.cpp:
+        (FunctionImp::call): Pass InterpreterImp, not ExecState, to ContextImp.
+        (DeclaredFunctionImp::DeclaredFunctionImp): List -> ScopeChain.
+        (ActivationImp::createArgumentsObject): ArgumentList -> List.
+        (GlobalFuncImp::call): Pass InterpreterImp, not an ExecState, to ContextImp.
+        * kjs/function.h: List -> ScopeChain.
+        * kjs/function_object.cpp: (FunctionObjectImp::construct): List -> ScopeChain.
+        * kjs/internal.cpp:
+        (ContextImp::ContextImp): Set the context in the interpreter.
+        (ContextImp::~ContextImp): Set the context in the interpreter to the caller.
+        (ContextImp::mark): Mark all the activation objects.
+        (InterpreterImp::InterpreterImp): Initialize context to 0.
+        (InterpreterImp::mark): Mark the top context.
+        (InterpreterImp::evaluate): Pass InterpreterImp to ContextImp.
+        * kjs/internal.h: Move ContextImp to its own header. Add setContext to InterpreterImp.
+        * kjs/interpreter.cpp: (Context::scopeChain): List -> ScopeChain.
+        * kjs/interpreter.h: List -> ScopeChain.
+        * kjs/nodes.cpp:
+        (ResolveNode::evaluateReference): List -> ScopeChain.
+        (FuncDeclNode::processFuncDecl): List -> ScopeChain.
+        (FuncExprNode::evaluate): List -> ScopeChain.
+        * kjs/object.cpp: List -> ScopeChain.
+        * kjs/object.h: List -> ScopeChain.
+
+        * kjs/types.h: Remove needsMarking features from List.
+        * kjs/types.cpp: Ditto.
+
 2002-11-21  Maciej Stachowiak  <mjs at apple.com>
 
 	- reduced the size of PropertyMap by storing sizes and such in the
diff --git a/JavaScriptCore/ChangeLog-2002-12-03 b/JavaScriptCore/ChangeLog-2002-12-03
index 976a712..dbab786 100644
--- a/JavaScriptCore/ChangeLog-2002-12-03
+++ b/JavaScriptCore/ChangeLog-2002-12-03
@@ -1,3 +1,43 @@
+2002-11-21  Darin Adler  <darin at apple.com>
+
+	- stop garbage collecting the ActivationImp objects, gets 3% on iBench
+	- pave the way to separate the argument lists from scope chains
+
+        * kjs/context.h: Added. Moved ContextImp here so it can use things defined
+	in function.h
+
+        * kjs/scope_chain.h: Added. Starting as a copy of List, to be improved.
+        * kjs/scope_chain.cpp: Added. Starting as a copy of List, to be improved.
+
+        * JavaScriptCore.pbproj/project.pbxproj: Rearranged things, added context.h.
+
+        * kjs/function.cpp:
+        (FunctionImp::call): Pass InterpreterImp, not ExecState, to ContextImp.
+        (DeclaredFunctionImp::DeclaredFunctionImp): List -> ScopeChain.
+        (ActivationImp::createArgumentsObject): ArgumentList -> List.
+        (GlobalFuncImp::call): Pass InterpreterImp, not an ExecState, to ContextImp.
+        * kjs/function.h: List -> ScopeChain.
+        * kjs/function_object.cpp: (FunctionObjectImp::construct): List -> ScopeChain.
+        * kjs/internal.cpp:
+        (ContextImp::ContextImp): Set the context in the interpreter.
+        (ContextImp::~ContextImp): Set the context in the interpreter to the caller.
+        (ContextImp::mark): Mark all the activation objects.
+        (InterpreterImp::InterpreterImp): Initialize context to 0.
+        (InterpreterImp::mark): Mark the top context.
+        (InterpreterImp::evaluate): Pass InterpreterImp to ContextImp.
+        * kjs/internal.h: Move ContextImp to its own header. Add setContext to InterpreterImp.
+        * kjs/interpreter.cpp: (Context::scopeChain): List -> ScopeChain.
+        * kjs/interpreter.h: List -> ScopeChain.
+        * kjs/nodes.cpp:
+        (ResolveNode::evaluateReference): List -> ScopeChain.
+        (FuncDeclNode::processFuncDecl): List -> ScopeChain.
+        (FuncExprNode::evaluate): List -> ScopeChain.
+        * kjs/object.cpp: List -> ScopeChain.
+        * kjs/object.h: List -> ScopeChain.
+
+        * kjs/types.h: Remove needsMarking features from List.
+        * kjs/types.cpp: Ditto.
+
 2002-11-21  Maciej Stachowiak  <mjs at apple.com>
 
 	- reduced the size of PropertyMap by storing sizes and such in the
diff --git a/JavaScriptCore/ChangeLog-2003-10-25 b/JavaScriptCore/ChangeLog-2003-10-25
index 976a712..dbab786 100644
--- a/JavaScriptCore/ChangeLog-2003-10-25
+++ b/JavaScriptCore/ChangeLog-2003-10-25
@@ -1,3 +1,43 @@
+2002-11-21  Darin Adler  <darin at apple.com>
+
+	- stop garbage collecting the ActivationImp objects, gets 3% on iBench
+	- pave the way to separate the argument lists from scope chains
+
+        * kjs/context.h: Added. Moved ContextImp here so it can use things defined
+	in function.h
+
+        * kjs/scope_chain.h: Added. Starting as a copy of List, to be improved.
+        * kjs/scope_chain.cpp: Added. Starting as a copy of List, to be improved.
+
+        * JavaScriptCore.pbproj/project.pbxproj: Rearranged things, added context.h.
+
+        * kjs/function.cpp:
+        (FunctionImp::call): Pass InterpreterImp, not ExecState, to ContextImp.
+        (DeclaredFunctionImp::DeclaredFunctionImp): List -> ScopeChain.
+        (ActivationImp::createArgumentsObject): ArgumentList -> List.
+        (GlobalFuncImp::call): Pass InterpreterImp, not an ExecState, to ContextImp.
+        * kjs/function.h: List -> ScopeChain.
+        * kjs/function_object.cpp: (FunctionObjectImp::construct): List -> ScopeChain.
+        * kjs/internal.cpp:
+        (ContextImp::ContextImp): Set the context in the interpreter.
+        (ContextImp::~ContextImp): Set the context in the interpreter to the caller.
+        (ContextImp::mark): Mark all the activation objects.
+        (InterpreterImp::InterpreterImp): Initialize context to 0.
+        (InterpreterImp::mark): Mark the top context.
+        (InterpreterImp::evaluate): Pass InterpreterImp to ContextImp.
+        * kjs/internal.h: Move ContextImp to its own header. Add setContext to InterpreterImp.
+        * kjs/interpreter.cpp: (Context::scopeChain): List -> ScopeChain.
+        * kjs/interpreter.h: List -> ScopeChain.
+        * kjs/nodes.cpp:
+        (ResolveNode::evaluateReference): List -> ScopeChain.
+        (FuncDeclNode::processFuncDecl): List -> ScopeChain.
+        (FuncExprNode::evaluate): List -> ScopeChain.
+        * kjs/object.cpp: List -> ScopeChain.
+        * kjs/object.h: List -> ScopeChain.
+
+        * kjs/types.h: Remove needsMarking features from List.
+        * kjs/types.cpp: Ditto.
+
 2002-11-21  Maciej Stachowiak  <mjs at apple.com>
 
 	- reduced the size of PropertyMap by storing sizes and such in the
diff --git a/JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj b/JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj
index 6762d2e..086e926 100644
--- a/JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj
+++ b/JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj
@@ -224,6 +224,8 @@
 				F5BB2BC7030F772101FCFE1D,
 				933A349C038AE7C6008635CE,
 				938772E6038BFE19008635CE,
+				9374D3A9038D9D74008635CE,
+				9373524F038DA8C2008635CE,
 			);
 			isa = PBXHeadersBuildPhase;
 			runOnlyForDeploymentPostprocessing = 0;
@@ -270,6 +272,7 @@
 				F5341395030CF5F8018BE7F3,
 				F5BB2BC6030F772101FCFE1D,
 				933A349E038AE80F008635CE,
+				9374D3AA038D9D74008635CE,
 			);
 			isa = PBXSourcesBuildPhase;
 			runOnlyForDeploymentPostprocessing = 0;
@@ -329,6 +332,7 @@
 				F692A8530255597D01FF60F7,
 				F5BB2BC4030F772101FCFE1D,
 				F5BB2BC5030F772101FCFE1D,
+				9373524E038DA8C2008635CE,
 				F692A8550255597D01FF60F7,
 				F692A8560255597D01FF60F7,
 				F692A8570255597D01FF60F7,
@@ -373,19 +377,22 @@
 				F692A87C0255597D01FF60F7,
 				F692A87D0255597D01FF60F7,
 				F692A87E0255597D01FF60F7,
+				9374D3A7038D9D74008635CE,
+				9374D3A8038D9D74008635CE,
 				F50888B6030BB74C012A967E,
 				F692A87F0255597D01FF60F7,
 				F692A8800255597D01FF60F7,
 				F692A8810255597D01FF60F7,
-				F692A8830255597D01FF60F7,
 				F692A8840255597D01FF60F7,
-				F692A8850255597D01FF60F7,
+				F692A8830255597D01FF60F7,
 				F692A8860255597D01FF60F7,
-				F692A8870255597D01FF60F7,
+				F692A8850255597D01FF60F7,
 				F692A8880255597D01FF60F7,
+				F692A8870255597D01FF60F7,
 			);
 			isa = PBXGroup;
 			name = Classes;
+			path = kjs;
 			refType = 4;
 		};
 //080
@@ -440,15 +447,13 @@
 		933A3499038AE7C6008635CE = {
 			fileEncoding = 4;
 			isa = PBXFileReference;
-			name = grammar.y;
-			path = kjs/grammar.y;
+			path = grammar.y;
 			refType = 4;
 		};
 		933A349A038AE7C6008635CE = {
 			fileEncoding = 4;
 			isa = PBXFileReference;
-			name = identifier.h;
-			path = kjs/identifier.h;
+			path = identifier.h;
 			refType = 4;
 		};
 		933A349C038AE7C6008635CE = {
@@ -463,8 +468,7 @@
 		933A349D038AE80F008635CE = {
 			fileEncoding = 4;
 			isa = PBXFileReference;
-			name = identifier.cpp;
-			path = kjs/identifier.cpp;
+			path = identifier.cpp;
 			refType = 4;
 		};
 		933A349E038AE80F008635CE = {
@@ -473,6 +477,48 @@
 			settings = {
 			};
 		};
+		9373524E038DA8C2008635CE = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = context.h;
+			refType = 4;
+		};
+		9373524F038DA8C2008635CE = {
+			fileRef = 9373524E038DA8C2008635CE;
+			isa = PBXBuildFile;
+			settings = {
+				ATTRIBUTES = (
+					Private,
+				);
+			};
+		};
+		9374D3A7038D9D74008635CE = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = scope_chain.h;
+			refType = 4;
+		};
+		9374D3A8038D9D74008635CE = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = scope_chain.cpp;
+			refType = 4;
+		};
+		9374D3A9038D9D74008635CE = {
+			fileRef = 9374D3A7038D9D74008635CE;
+			isa = PBXBuildFile;
+			settings = {
+				ATTRIBUTES = (
+					Private,
+				);
+			};
+		};
+		9374D3AA038D9D74008635CE = {
+			fileRef = 9374D3A8038D9D74008635CE;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
 		938772E5038BFE19008635CE = {
 			fileEncoding = 4;
 			isa = PBXFileReference;
@@ -498,8 +544,7 @@
 		F50888B6030BB74C012A967E = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = simple_number.h;
-			path = kjs/simple_number.h;
+			path = simple_number.h;
 			refType = 4;
 		};
 		F50888B7030BB74C012A967E = {
@@ -526,15 +571,13 @@
 		F5341390030CEEB1018BE7F3 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = reference.cpp;
-			path = kjs/reference.cpp;
+			path = reference.cpp;
 			refType = 4;
 		};
 		F5341391030CEEB1018BE7F3 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = reference.h;
-			path = kjs/reference.h;
+			path = reference.h;
 			refType = 4;
 		};
 		F5341392030CEEB1018BE7F3 = {
@@ -558,8 +601,7 @@
 		F5341394030CF5F8018BE7F3 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = reference_list.cpp;
-			path = kjs/reference_list.cpp;
+			path = reference_list.cpp;
 			refType = 4;
 		};
 		F5341395030CF5F8018BE7F3 = {
@@ -574,8 +616,7 @@
 		F54F0800030CD22001B5C2EB = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = reference_list.h;
-			path = kjs/reference_list.h;
+			path = reference_list.h;
 			refType = 4;
 		};
 		F54F0801030CD22001B5C2EB = {
@@ -604,15 +645,13 @@
 		F5BB2BC4030F772101FCFE1D = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = completion.cpp;
-			path = kjs/completion.cpp;
+			path = completion.cpp;
 			refType = 4;
 		};
 		F5BB2BC5030F772101FCFE1D = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = completion.h;
-			path = kjs/completion.h;
+			path = completion.h;
 			refType = 4;
 		};
 		F5BB2BC6030F772101FCFE1D = {
@@ -645,13 +684,14 @@
 			);
 			isa = PBXGroup;
 			name = "Other Sources";
-			path = "";
+			path = kjs;
 			refType = 4;
 		};
 		F5C290E60284F98E018635CA = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			path = JavaScriptCorePrefix.h;
+			name = JavaScriptCorePrefix.h;
+			path = ../JavaScriptCorePrefix.h;
 			refType = 4;
 		};
 		F5C290E70284F98E018635CA = {
@@ -663,8 +703,7 @@
 		F5FFE656026B47A6018635CA = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = nodes2string.cpp;
-			path = kjs/nodes2string.cpp;
+			path = nodes2string.cpp;
 			refType = 4;
 		};
 		F5FFE657026B47A6018635CA = {
@@ -686,8 +725,7 @@
 		F68EBB8C0255D4C601FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = config.h;
-			path = kjs/config.h;
+			path = config.h;
 			refType = 4;
 		};
 		F68EBB8E0255D4C601FF60F7 = {
@@ -702,400 +740,343 @@
 		F692A84D0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = array_object.cpp;
-			path = kjs/array_object.cpp;
+			path = array_object.cpp;
 			refType = 4;
 		};
 		F692A84E0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = array_object.h;
-			path = kjs/array_object.h;
+			path = array_object.h;
 			refType = 4;
 		};
 		F692A84F0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = array_object.lut.h;
-			path = kjs/array_object.lut.h;
+			path = array_object.lut.h;
 			refType = 4;
 		};
 		F692A8500255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = bool_object.cpp;
-			path = kjs/bool_object.cpp;
+			path = bool_object.cpp;
 			refType = 4;
 		};
 		F692A8510255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = bool_object.h;
-			path = kjs/bool_object.h;
+			path = bool_object.h;
 			refType = 4;
 		};
 		F692A8520255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = collector.cpp;
-			path = kjs/collector.cpp;
+			path = collector.cpp;
 			refType = 4;
 		};
 		F692A8530255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = collector.h;
-			path = kjs/collector.h;
+			path = collector.h;
 			refType = 4;
 		};
 		F692A8540255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXExecutableFileReference;
-			name = create_hash_table;
-			path = kjs/create_hash_table;
+			path = create_hash_table;
 			refType = 4;
 		};
 		F692A8550255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = date_object.cpp;
-			path = kjs/date_object.cpp;
+			path = date_object.cpp;
 			refType = 4;
 		};
 		F692A8560255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = date_object.h;
-			path = kjs/date_object.h;
+			path = date_object.h;
 			refType = 4;
 		};
 		F692A8570255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = date_object.lut.h;
-			path = kjs/date_object.lut.h;
+			path = date_object.lut.h;
 			refType = 4;
 		};
 		F692A8580255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = debugger.cpp;
-			path = kjs/debugger.cpp;
+			path = debugger.cpp;
 			refType = 4;
 		};
 		F692A8590255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = debugger.h;
-			path = kjs/debugger.h;
+			path = debugger.h;
 			refType = 4;
 		};
 		F692A85A0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = error_object.cpp;
-			path = kjs/error_object.cpp;
+			path = error_object.cpp;
 			refType = 4;
 		};
 		F692A85B0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = error_object.h;
-			path = kjs/error_object.h;
+			path = error_object.h;
 			refType = 4;
 		};
 		F692A85C0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = function_object.cpp;
-			path = kjs/function_object.cpp;
+			path = function_object.cpp;
 			refType = 4;
 		};
 		F692A85D0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = function_object.h;
-			path = kjs/function_object.h;
+			path = function_object.h;
 			refType = 4;
 		};
 		F692A85E0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = function.cpp;
-			path = kjs/function.cpp;
+			path = function.cpp;
 			refType = 4;
 		};
 		F692A85F0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = function.h;
-			path = kjs/function.h;
+			path = function.h;
 			refType = 4;
 		};
 		F692A8610255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = internal.cpp;
-			path = kjs/internal.cpp;
+			path = internal.cpp;
 			refType = 4;
 		};
 		F692A8620255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = internal.h;
-			path = kjs/internal.h;
+			path = internal.h;
 			refType = 4;
 		};
 		F692A8630255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = interpreter.cpp;
-			path = kjs/interpreter.cpp;
+			path = interpreter.cpp;
 			refType = 4;
 		};
 		F692A8640255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = interpreter.h;
-			path = kjs/interpreter.h;
+			path = interpreter.h;
 			refType = 4;
 		};
 		F692A8650255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = lexer.cpp;
-			path = kjs/lexer.cpp;
+			path = lexer.cpp;
 			refType = 4;
 		};
 		F692A8660255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = lexer.h;
-			path = kjs/lexer.h;
+			path = lexer.h;
 			refType = 4;
 		};
 		F692A8670255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = lexer.lut.h;
-			path = kjs/lexer.lut.h;
+			path = lexer.lut.h;
 			refType = 4;
 		};
 		F692A8680255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = lookup.cpp;
-			path = kjs/lookup.cpp;
+			path = lookup.cpp;
 			refType = 4;
 		};
 		F692A8690255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = lookup.h;
-			path = kjs/lookup.h;
+			path = lookup.h;
 			refType = 4;
 		};
 		F692A86A0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = math_object.cpp;
-			path = kjs/math_object.cpp;
+			path = math_object.cpp;
 			refType = 4;
 		};
 		F692A86B0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = math_object.h;
-			path = kjs/math_object.h;
+			path = math_object.h;
 			refType = 4;
 		};
 		F692A86C0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = math_object.lut.h;
-			path = kjs/math_object.lut.h;
+			path = math_object.lut.h;
 			refType = 4;
 		};
 		F692A86D0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = nodes.cpp;
-			path = kjs/nodes.cpp;
+			path = nodes.cpp;
 			refType = 4;
 		};
 		F692A86E0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = nodes.h;
-			path = kjs/nodes.h;
+			path = nodes.h;
 			refType = 4;
 		};
 		F692A8700255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = number_object.cpp;
-			path = kjs/number_object.cpp;
+			path = number_object.cpp;
 			refType = 4;
 		};
 		F692A8710255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = number_object.h;
-			path = kjs/number_object.h;
+			path = number_object.h;
 			refType = 4;
 		};
 		F692A8720255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = number_object.lut.h;
-			path = kjs/number_object.lut.h;
+			path = number_object.lut.h;
 			refType = 4;
 		};
 		F692A8730255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = object_object.cpp;
-			path = kjs/object_object.cpp;
+			path = object_object.cpp;
 			refType = 4;
 		};
 		F692A8740255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = object_object.h;
-			path = kjs/object_object.h;
+			path = object_object.h;
 			refType = 4;
 		};
 		F692A8750255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = object.cpp;
-			path = kjs/object.cpp;
+			path = object.cpp;
 			refType = 4;
 		};
 		F692A8760255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = object.h;
-			path = kjs/object.h;
+			path = object.h;
 			refType = 4;
 		};
 		F692A8770255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = operations.cpp;
-			path = kjs/operations.cpp;
+			path = operations.cpp;
 			refType = 4;
 		};
 		F692A8780255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = operations.h;
-			path = kjs/operations.h;
+			path = operations.h;
 			refType = 4;
 		};
 		F692A8790255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = property_map.cpp;
-			path = kjs/property_map.cpp;
+			path = property_map.cpp;
 			refType = 4;
 		};
 		F692A87A0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = property_map.h;
-			path = kjs/property_map.h;
+			path = property_map.h;
 			refType = 4;
 		};
 		F692A87B0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = regexp_object.cpp;
-			path = kjs/regexp_object.cpp;
+			path = regexp_object.cpp;
 			refType = 4;
 		};
 		F692A87C0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = regexp_object.h;
-			path = kjs/regexp_object.h;
+			path = regexp_object.h;
 			refType = 4;
 		};
 		F692A87D0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = regexp.cpp;
-			path = kjs/regexp.cpp;
+			path = regexp.cpp;
 			refType = 4;
 		};
 		F692A87E0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = regexp.h;
-			path = kjs/regexp.h;
+			path = regexp.h;
 			refType = 4;
 		};
 		F692A87F0255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = string_object.cpp;
-			path = kjs/string_object.cpp;
+			path = string_object.cpp;
 			refType = 4;
 		};
 		F692A8800255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = string_object.h;
-			path = kjs/string_object.h;
+			path = string_object.h;
 			refType = 4;
 		};
 		F692A8810255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = string_object.lut.h;
-			path = kjs/string_object.lut.h;
+			path = string_object.lut.h;
 			refType = 4;
 		};
 		F692A8830255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = types.cpp;
-			path = kjs/types.cpp;
+			path = types.cpp;
 			refType = 4;
 		};
 		F692A8840255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = types.h;
-			path = kjs/types.h;
+			path = types.h;
 			refType = 4;
 		};
 		F692A8850255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = ustring.cpp;
-			path = kjs/ustring.cpp;
+			path = ustring.cpp;
 			refType = 4;
 		};
 		F692A8860255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = ustring.h;
-			path = kjs/ustring.h;
+			path = ustring.h;
 			refType = 4;
 		};
 		F692A8870255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = value.cpp;
-			path = kjs/value.cpp;
+			path = value.cpp;
 			refType = 4;
 		};
 		F692A8880255597D01FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = value.h;
-			path = kjs/value.h;
+			path = value.h;
 			refType = 4;
 		};
 		F692A8890255597D01FF60F7 = {
@@ -1500,22 +1481,19 @@
 		F692A8C802555BA201FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = grammar.cpp;
-			path = kjs/grammar.cpp;
+			path = grammar.cpp;
 			refType = 4;
 		};
 		F692A8C902555BA201FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = grammar.cpp.h;
-			path = kjs/grammar.cpp.h;
+			path = grammar.cpp.h;
 			refType = 4;
 		};
 		F692A8CA02555BA201FF60F7 = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
-			name = grammar.h;
-			path = kjs/grammar.h;
+			path = grammar.h;
 			refType = 4;
 		};
 		F692A8CB02555BA201FF60F7 = {
diff --git a/JavaScriptCore/kjs/context.h b/JavaScriptCore/kjs/context.h
new file mode 100644
index 0000000..5e0be1f
--- /dev/null
+++ b/JavaScriptCore/kjs/context.h
@@ -0,0 +1,73 @@
+// -*- 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)
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public License
+ *  along with this library; see the file COPYING.LIB.  If not, write to
+ *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ *  Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef KJS_CONTEXT_H
+#define KJS_CONTEXT_H
+
+#include "function.h"
+
+namespace KJS  {
+
+  /**
+   * @short Execution context.
+   */
+  class ContextImp {
+  public:
+    ContextImp(Object &glob, InterpreterImp *, Object &thisV, CodeType type = GlobalCode,
+               ContextImp *callingContext = 0, FunctionImp *functiion = 0, const List *args = 0);
+    ~ContextImp();
+
+    const ScopeChain scopeChain() const { return scope; }
+    Object variableObject() const { return variable; }
+    void setVariableObject(const Object &v) { variable = v; }
+    Object thisValue() const { return thisVal; }
+    ContextImp *callingContext() { return _callingContext; }
+    ObjectImp *activationObject() { return activation.imp(); }
+    FunctionImp *function() const { return _function; }
+    const List *arguments() const { return _arguments; }
+
+    void pushScope(const Object &s);
+    void popScope();
+    LabelStack *seenLabels() { return &ls; }
+    
+    void mark();
+
+  private:
+    InterpreterImp *_interpreter;
+    ContextImp *_callingContext;
+    ActivationImp _activationImp;
+    FunctionImp *_function;
+    const List *_arguments;
+    Object activation;
+    
+    ScopeChain scope;
+    Object variable;
+    Object thisVal;
+
+    LabelStack ls;
+    CodeType codeType;
+  };
+
+} // namespace KJS
+
+#endif
diff --git a/JavaScriptCore/kjs/function.cpp b/JavaScriptCore/kjs/function.cpp
index 0b2d0a9..7315a5a 100644
--- a/JavaScriptCore/kjs/function.cpp
+++ b/JavaScriptCore/kjs/function.cpp
@@ -29,6 +29,7 @@
 #include "nodes.h"
 #include "operations.h"
 #include "debugger.h"
+#include "context.h"
 
 #include <stdio.h>
 #include <errno.h>
@@ -92,7 +93,7 @@ Value FunctionImp::call(ExecState *exec, Object &thisObj, const List &args)
   }
 
   // enter a new execution context
-  ContextImp ctx(globalObj, exec, thisObj, codeType(),
+  ContextImp ctx(globalObj, exec->interpreter()->imp(), thisObj, codeType(),
                  exec->context().imp(), this, &args);
   ExecState newExec(exec->interpreter(), &ctx);
   newExec.setException(exec->exception()); // could be null
@@ -254,7 +255,7 @@ bool FunctionImp::deleteProperty(ExecState *exec, const Identifier &propertyName
 const ClassInfo DeclaredFunctionImp::info = {"Function", &FunctionImp::info, 0, 0};
 
 DeclaredFunctionImp::DeclaredFunctionImp(ExecState *exec, const Identifier &n,
-					 FunctionBodyNode *b, const List &sc)
+					 FunctionBodyNode *b, const ScopeChain &sc)
   : FunctionImp(exec,n), body(b)
 {
   Value protect(this);
@@ -380,7 +381,7 @@ void ActivationImp::mark()
 void ActivationImp::createArgumentsObject(ExecState *exec) const
 {
     FunctionImp *function = _context->function();
-    const ArgumentList *arguments = _context->arguments();
+    const List *arguments = _context->arguments();
     if (arguments)
         _argumentsObject = new ArgumentsImp(exec, function, *arguments);
     else
@@ -441,7 +442,7 @@ Value GlobalFuncImp::call(ExecState *exec, Object &/*thisObj*/, const List &args
       // enter a new execution context
       Object thisVal(Object::dynamicCast(exec->context().thisValue()));
       ContextImp ctx(exec->interpreter()->globalObject(),
-                     exec,
+                     exec->interpreter()->imp(),
                      thisVal,
                      EvalCode,
                      exec->context().imp());
diff --git a/JavaScriptCore/kjs/function.h b/JavaScriptCore/kjs/function.h
index fc1f5cc..42f7d1f 100644
--- a/JavaScriptCore/kjs/function.h
+++ b/JavaScriptCore/kjs/function.h
@@ -70,7 +70,7 @@ namespace KJS {
   class DeclaredFunctionImp : public FunctionImp {
   public:
     DeclaredFunctionImp(ExecState *exec, const Identifier &n,
-			FunctionBodyNode *b, const List &sc);
+			FunctionBodyNode *b, const ScopeChain &sc);
     ~DeclaredFunctionImp();
 
     bool implementsConstruct() const;
diff --git a/JavaScriptCore/kjs/function_object.cpp b/JavaScriptCore/kjs/function_object.cpp
index 3779c56..826e5e0 100644
--- a/JavaScriptCore/kjs/function_object.cpp
+++ b/JavaScriptCore/kjs/function_object.cpp
@@ -233,8 +233,8 @@ Object FunctionObjectImp::construct(ExecState *exec, const List &args)
     return err;
   }
 
-  List scopeChain;
-  scopeChain.append(exec->interpreter()->globalObject());
+  ScopeChain scopeChain;
+  scopeChain.prepend(exec->interpreter()->globalObject());
   FunctionBodyNode *bodyNode = progNode;
 
   FunctionImp *fimp = new DeclaredFunctionImp(exec, Identifier::null, bodyNode,
diff --git a/JavaScriptCore/kjs/internal.cpp b/JavaScriptCore/kjs/internal.cpp
index e7e7c0a..a84b747 100644
--- a/JavaScriptCore/kjs/internal.cpp
+++ b/JavaScriptCore/kjs/internal.cpp
@@ -31,6 +31,7 @@
 #include "array_object.h"
 #include "bool_object.h"
 #include "collector.h"
+#include "context.h"
 #include "date_object.h"
 #include "debugger.h"
 #include "error_object.h"
@@ -356,16 +357,16 @@ void LabelStack::clear()
 // ------------------------------ ContextImp -----------------------------------
 
 // ECMA 10.2
-ContextImp::ContextImp(Object &glob, ExecState *exec, Object &thisV, CodeType type,
-                       ContextImp *_callingContext, FunctionImp *func, const ArgumentList *args)
-    : _function(func), _arguments(args)
+ContextImp::ContextImp(Object &glob, InterpreterImp *interpreter, Object &thisV, CodeType type,
+                       ContextImp *callingCon, FunctionImp *func, const List *args)
+    : _interpreter(interpreter), _activationImp(this), _function(func), _arguments(args)
 {
   codeType = type;
-  callingCon = _callingContext;
+  _callingContext = callingCon;
 
   // create and initialize activation object (ECMA 10.1.6)
   if (type == FunctionCode || type == AnonymousCode ) {
-    activation = Object(new ActivationImp(this));
+    activation = Object(&_activationImp);
     variable = activation;
   } else {
     activation = Object();
@@ -375,15 +376,15 @@ ContextImp::ContextImp(Object &glob, ExecState *exec, Object &thisV, CodeType ty
   // ECMA 10.2
   switch(type) {
     case EvalCode:
-      if (callingCon) {
-	scope = callingCon->scopeChain().copy();
-	variable = callingCon->variableObject();
-	thisVal = callingCon->thisValue();
+      if (_callingContext) {
+	scope = _callingContext->scopeChain().copy();
+	variable = _callingContext->variableObject();
+	thisVal = _callingContext->thisValue();
 	break;
       } // else same as GlobalCode
     case GlobalCode:
-      scope = List();
-      scope.append(glob);
+      scope = ScopeChain();
+      scope.prepend(glob);
       thisVal = Object(static_cast<ObjectImp*>(glob.imp()));
       break;
     case FunctionCode:
@@ -392,19 +393,21 @@ ContextImp::ContextImp(Object &glob, ExecState *exec, Object &thisV, CodeType ty
 	scope = func->scope().copy();
 	scope.prepend(activation);
       } else {
-	scope = List();
-	scope.append(activation);
-	scope.append(glob);
+	scope = ScopeChain();
+	scope.prepend(glob);
+	scope.prepend(activation);
       }
       variable = activation; // TODO: DontDelete ? (ECMA 10.2.3)
       thisVal = thisV;
       break;
     }
 
+  _interpreter->setContext(this);
 }
 
 ContextImp::~ContextImp()
 {
+  _interpreter->setContext(_callingContext);
 }
 
 void ContextImp::pushScope(const Object &s)
@@ -417,6 +420,12 @@ void ContextImp::popScope()
   scope.removeFirst();
 }
 
+void ContextImp::mark()
+{
+  for (ContextImp *context = this; context; context = context->_callingContext)
+    context->_activationImp.mark();
+}
+
 // ------------------------------ Parser ---------------------------------------
 
 ProgramNode *Parser::progNode = 0;
@@ -499,6 +508,7 @@ void InterpreterImp::globalClear()
 }
 
 InterpreterImp::InterpreterImp(Interpreter *interp, const Object &glob)
+    : _context(0)
 {
   // add this interpreter to the global chain
   // as a root set for garbage collection
@@ -699,6 +709,8 @@ void InterpreterImp::mark()
     global.imp()->mark();
   if (m_interpreter)
     m_interpreter->mark();
+  if (_context)
+    _context->mark();
 }
 
 bool InterpreterImp::checkSyntax(const UString &code)
@@ -781,7 +793,7 @@ Completion InterpreterImp::evaluate(const UString &code, const Value &thisV)
   }
   else {
     // execute the code
-    ContextImp ctx(globalObj, 0, thisObj);
+    ContextImp ctx(globalObj, this, thisObj);
     ExecState newExec(m_interpreter,&ctx);
     res = progNode->execute(&newExec);
   }
diff --git a/JavaScriptCore/kjs/internal.h b/JavaScriptCore/kjs/internal.h
index 9a58e48..e8e38a9 100644
--- a/JavaScriptCore/kjs/internal.h
+++ b/JavaScriptCore/kjs/internal.h
@@ -29,6 +29,7 @@
 #include "object.h"
 #include "types.h"
 #include "interpreter.h"
+#include "scope_chain.h"
 
 #define I18N_NOOP(s) s
 
@@ -194,42 +195,6 @@ namespace KJS {
 		  AnonymousCode };
 
   /**
-   * @short Execution context.
-   */
-  class ContextImp {
-  public:
-    ContextImp(Object &glob, ExecState *exec, Object &thisV, CodeType type = GlobalCode,
-               ContextImp *_callingContext = 0L, FunctionImp *func = 0L, const ArgumentList *args = 0);
-    ~ContextImp();
-
-    const List scopeChain() const { return scope; }
-    Object variableObject() const { return variable; }
-    void setVariableObject(const Object &v) { variable = v; }
-    Object thisValue() const { return thisVal; }
-    ContextImp *callingContext() { return callingCon; }
-    ObjectImp *activationObject() { return activation.imp(); }
-    FunctionImp *function() const { return _function; }
-    const ArgumentList *arguments() const { return _arguments; }
-
-    void pushScope(const Object &s);
-    void popScope();
-    LabelStack *seenLabels() { return &ls; }
-
-  private:
-
-    List scope;
-    Object variable;
-    Object thisVal;
-    ContextImp *callingCon;
-    Object activation;
-    FunctionImp *_function;
-    const ArgumentList *_arguments;
-
-    LabelStack ls;
-    CodeType codeType;
-  };
-
-  /**
    * @internal
    *
    * Parses ECMAScript source code and converts into ProgramNode objects, which
@@ -308,6 +273,8 @@ namespace KJS {
     static InterpreterImp* firstInterpreter() { return s_hook; }
     InterpreterImp *nextInterpreter() const { return next; }
     InterpreterImp *prevInterpreter() const { return prev; }
+    
+    void setContext(ContextImp *c) { _context = c; }
 
   private:
     void clear();
@@ -359,6 +326,8 @@ namespace KJS {
     // Chained list of interpreters (ring) - for collector
     static InterpreterImp* s_hook;
     InterpreterImp *next, *prev;
+    
+    ContextImp *_context;
 
     int recursion;
   };
diff --git a/JavaScriptCore/kjs/interpreter.cpp b/JavaScriptCore/kjs/interpreter.cpp
index 1706f1c..eab661f 100644
--- a/JavaScriptCore/kjs/interpreter.cpp
+++ b/JavaScriptCore/kjs/interpreter.cpp
@@ -35,6 +35,7 @@
 #include "operations.h"
 #include "error_object.h"
 #include "nodes.h"
+#include "context.h"
 
 using namespace KJS;
 
@@ -70,7 +71,7 @@ ContextImp *Context::imp() const
   return rep;
 }
 
-const List Context::scopeChain() const
+const ScopeChain Context::scopeChain() const
 {
   return rep->scopeChain();
 }
diff --git a/JavaScriptCore/kjs/interpreter.h b/JavaScriptCore/kjs/interpreter.h
index 5243845..fcbfbe5 100644
--- a/JavaScriptCore/kjs/interpreter.h
+++ b/JavaScriptCore/kjs/interpreter.h
@@ -68,7 +68,7 @@ namespace KJS {
      *
      * @return The execution context's scope chain
      */
-    const List scopeChain() const;
+    const ScopeChain scopeChain() const;
 
     /**
      * Returns the variable object for the execution context. This contains a
diff --git a/JavaScriptCore/kjs/nodes.cpp b/JavaScriptCore/kjs/nodes.cpp
index 7b1b9c3..5e4949e 100644
--- a/JavaScriptCore/kjs/nodes.cpp
+++ b/JavaScriptCore/kjs/nodes.cpp
@@ -32,6 +32,7 @@
 #endif
 
 #include "collector.h"
+#include "context.h"
 #include "debugger.h"
 #include "function_object.h"
 #include "internal.h"
@@ -217,8 +218,8 @@ Value ResolveNode::evaluate(ExecState *exec)
 
 Reference ResolveNode::evaluateReference(ExecState *exec)
 {
-  const List chain = exec->context().scopeChain();
-  ListIterator scope = chain.begin();
+  const ScopeChain chain = exec->context().scopeChain();
+  ScopeChainIterator scope = chain.begin();
 
   while (scope != chain.end()) {
     ObjectImp *o = static_cast<ObjectImp*>((*scope).imp());
@@ -2765,7 +2766,7 @@ bool FuncDeclNode::deref()
 // ECMA 13
 void FuncDeclNode::processFuncDecl(ExecState *exec)
 {
-  const List sc = exec->context().imp()->scopeChain();
+  const ScopeChain sc = exec->context().imp()->scopeChain();
 
   // TODO: let this be an object with [[Class]] property "Function"
   FunctionImp *fimp = new DeclaredFunctionImp(exec, ident, body, sc);
@@ -2820,7 +2821,7 @@ bool FuncExprNode::deref()
 // ECMA 13
 Value FuncExprNode::evaluate(ExecState *exec)
 {
-  const List sc = exec->context().scopeChain();
+  const ScopeChain sc = exec->context().scopeChain();
   FunctionImp *fimp = new DeclaredFunctionImp(exec, Identifier::null, body, sc);
   Value ret(fimp);
   List empty;
diff --git a/JavaScriptCore/kjs/object.cpp b/JavaScriptCore/kjs/object.cpp
index 50114e6..b6dd5a2 100644
--- a/JavaScriptCore/kjs/object.cpp
+++ b/JavaScriptCore/kjs/object.cpp
@@ -365,12 +365,12 @@ Boolean ObjectImp::hasInstance(ExecState */*exec*/, const Value &/*value*/)
   return Boolean(false);
 }
 
-const List ObjectImp::scope() const
+const ScopeChain ObjectImp::scope() const
 {
   return _scope;
 }
 
-void ObjectImp::setScope(const List &s)
+void ObjectImp::setScope(const ScopeChain &s)
 {
   _scope = s;
 }
diff --git a/JavaScriptCore/kjs/object.h b/JavaScriptCore/kjs/object.h
index 0ed63ea..05c5155 100644
--- a/JavaScriptCore/kjs/object.h
+++ b/JavaScriptCore/kjs/object.h
@@ -41,6 +41,7 @@
 #include "types.h"
 #include "reference_list.h"
 #include "property_map.h"
+#include "scope_chain.h"
 
 namespace KJS {
 
@@ -318,8 +319,8 @@ namespace KJS {
      * @param exec The current execution state
      * @return The function's scope
      */
-    const List scope() const;
-    void setScope(const List &s);
+    const ScopeChain scope() const;
+    void setScope(const ScopeChain &s);
 
     /**
      * Returns a List of References to all the properties of the object. Used
@@ -568,8 +569,8 @@ namespace KJS {
      *
      * @see Object::scope()
      */
-    const List scope() const;
-    void setScope(const List &s);
+    const ScopeChain scope() const;
+    void setScope(const ScopeChain &s);
 
     ReferenceList propList(ExecState *exec, bool recursive = true);
 
@@ -601,7 +602,7 @@ namespace KJS {
     PropertyMap _prop;
     ValueImp *_proto;
     ValueImp *_internalValue;
-    List _scope;
+    ScopeChain _scope;
   };
 
   /**
@@ -704,10 +705,10 @@ namespace KJS {
   inline Boolean Object::hasInstance(ExecState *exec, const Value &value)
     { return imp()->hasInstance(exec,value); }
 
-  inline const List Object::scope() const
+  inline const ScopeChain Object::scope() const
     { return imp()->scope(); }
 
-  inline void Object::setScope(const List &s)
+  inline void Object::setScope(const ScopeChain &s)
     { imp()->setScope(s); }
 
   inline ReferenceList Object::propList(ExecState *exec, bool recursive)
diff --git a/JavaScriptCore/kjs/property_map.cpp b/JavaScriptCore/kjs/property_map.cpp
index 1c9d078..97daa44 100644
--- a/JavaScriptCore/kjs/property_map.cpp
+++ b/JavaScriptCore/kjs/property_map.cpp
@@ -36,6 +36,14 @@
 
 namespace KJS {
 
+struct PropertyMapHashTable
+{
+    int sizeMask;
+    int size;
+    int keyCount;
+    PropertyMapHashTableEntry entries[1];
+};
+    
 class SavedProperty {
 public:
     Identifier key;
@@ -190,15 +198,15 @@ void PropertyMap::put(const Identifier &name, ValueImp *value, int attributes)
 
 inline void PropertyMap::insert(UString::Rep *key, ValueImp *value, int attributes)
 {
-  assert(_table);
+    assert(_table);
 
-  int i = hash(key);
-  while (_table->entries[i].key)
-    i = (i + 1) & _table->sizeMask;
+    int i = hash(key);
+    while (_table->entries[i].key)
+        i = (i + 1) & _table->sizeMask;
     
-  _table->entries[i].key = key;
-  _table->entries[i].value = value;
-  _table->entries[i].attributes = attributes;
+    _table->entries[i].key = key;
+    _table->entries[i].value = value;
+    _table->entries[i].attributes = attributes;
 }
 
 void PropertyMap::expand()
@@ -206,12 +214,12 @@ void PropertyMap::expand()
     checkConsistency();
     
     Table *oldTable = _table;
-    int oldTableSize = oldTable ? _table->size : 0;
+    int oldTableSize = oldTable ? oldTable->size : 0;
 
     int newTableSize = oldTableSize ? oldTableSize * 2 : 16;
     _table = (Table *)calloc(1, sizeof(Table) + (newTableSize - 1) * sizeof(Entry) );
     _table->size = newTableSize;
-    _table->sizeMask = _table->size - 1;
+    _table->sizeMask = newTableSize - 1;
 
 #if USE_SINGLE_ENTRY
     UString::Rep *key = _singleEntry.key;
diff --git a/JavaScriptCore/kjs/property_map.h b/JavaScriptCore/kjs/property_map.h
index 67ea8b2..697312c 100644
--- a/JavaScriptCore/kjs/property_map.h
+++ b/JavaScriptCore/kjs/property_map.h
@@ -33,6 +33,8 @@ namespace KJS {
     
     class SavedProperty;
     
+    struct PropertyMapHashTable;
+    
     class SavedProperties {
     friend class PropertyMap;
     public:
@@ -55,14 +57,6 @@ namespace KJS {
         int attributes;
     };
 
-    struct PropertyMapHashTable
-    {
-        int sizeMask;
-        int size;
-        int keyCount;
-        PropertyMapHashTableEntry entries[1];
-    };
-    
     class PropertyMap {
     public:
         PropertyMap();
diff --git a/JavaScriptCore/kjs/scope_chain.cpp b/JavaScriptCore/kjs/scope_chain.cpp
new file mode 100644
index 0000000..c3fd770
--- /dev/null
+++ b/JavaScriptCore/kjs/scope_chain.cpp
@@ -0,0 +1,231 @@
+// -*- 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)
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public License
+ *  along with this library; see the file COPYING.LIB.  If not, write to
+ *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ *  Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "scope_chain.h"
+
+namespace KJS {
+
+  struct ScopeChainNode {
+    ScopeChainNode(const Value &val, ScopeChainNode *p, ScopeChainNode *n)
+      : member(val.imp()), prev(p), next(n) { }
+    ScopeChainNode(ValueImp *val, ScopeChainNode *p, ScopeChainNode *n)
+      : member(val), prev(p), next(n) { }
+    ValueImp *member;
+    ScopeChainNode *prev, *next;
+  };
+
+  struct ScopeChainHookNode : public ScopeChainNode {
+    ScopeChainHookNode(bool needsMarking) : ScopeChainNode(Value(), this, this),
+        listRefCount(1), nodesRefCount(needsMarking ? 0 : 1) { }
+    int listRefCount;
+    int nodesRefCount;
+  };
+
+// ------------------------------ ScopeChainIterator ---------------------------------
+
+ValueImp* ScopeChainIterator::operator->() const
+{
+  return node->member;
+}
+
+Value ScopeChainIterator::operator*() const
+{
+  return Value(node->member);
+}
+
+Value ScopeChainIterator::operator++()
+{
+  node = node->next;
+  return Value(node->member);
+}
+
+Value ScopeChainIterator::operator++(int)
+{
+  const ScopeChainNode *n = node;
+  ++*this;
+  return Value(n->member);
+}
+
+// ------------------------------ ScopeChain -----------------------------------------
+
+ScopeChain::ScopeChain(bool needsMarking) : hook(new ScopeChainHookNode(needsMarking)), m_needsMarking(needsMarking)
+{
+}
+
+ScopeChain::ScopeChain(const ScopeChain& l) : hook(l.hook), m_needsMarking(false)
+{
+  ++hook->listRefCount;
+  if (hook->nodesRefCount++ == 0)
+    refAll();
+}
+
+ScopeChain& ScopeChain::operator=(const ScopeChain& l)
+{
+  ScopeChain(l).swap(*this);
+  return *this;
+}
+
+ScopeChain::~ScopeChain()
+{
+  if (!m_needsMarking)
+    if (--hook->nodesRefCount == 0)
+      derefAll();
+  
+  if (--hook->listRefCount == 0) {
+    assert(hook->nodesRefCount == 0);
+    clearInternal();
+    delete hook;
+  }
+}
+
+void ScopeChain::mark() const
+{
+  ScopeChainNode *n = hook->next;
+  while (n != hook) {
+    if (!n->member->marked())
+      n->member->mark();
+    n = n->next;
+  }
+}
+
+void ScopeChain::append(const Value& val)
+{
+  ScopeChainNode *n = new ScopeChainNode(val, hook->prev, hook);
+  if (hook->nodesRefCount)
+    n->member->ref();
+  hook->prev->next = n;
+  hook->prev = n;
+}
+
+void ScopeChain::prepend(const Value& val)
+{
+  ScopeChainNode *n = new ScopeChainNode(val, hook, hook->next);
+  if (hook->nodesRefCount)
+    n->member->ref();
+  hook->next->prev = n;
+  hook->next = n;
+}
+
+void ScopeChain::prepend(ValueImp *val)
+{
+  ScopeChainNode *n = new ScopeChainNode(val, hook, hook->next);
+  if (hook->nodesRefCount)
+    n->member->ref();
+  hook->next->prev = n;
+  hook->next = n;
+}
+
+void ScopeChain::prependList(const ScopeChain& lst)
+{
+  ScopeChainNode *otherHook = lst.hook;
+  ScopeChainNode *n = otherHook->prev;
+  while (n != otherHook) {
+    prepend(n->member);
+    n = n->prev;
+  }
+}
+
+void ScopeChain::removeFirst()
+{
+  erase(hook->next);
+}
+
+void ScopeChain::clearInternal()
+{
+  ScopeChainNode *n = hook->next;
+  while (n != hook) {
+    n = n->next;
+    delete n->prev;
+  }
+
+  hook->next = hook;
+  hook->prev = hook;
+}
+
+ScopeChain ScopeChain::copy() const
+{
+  ScopeChain newScopeChain;
+  newScopeChain.prependList(*this);
+  return newScopeChain;
+}
+
+ScopeChainIterator ScopeChain::begin() const
+{
+  return ScopeChainIterator(hook->next);
+}
+
+ScopeChainIterator ScopeChain::end() const
+{
+  return ScopeChainIterator(hook);
+}
+
+void ScopeChain::erase(ScopeChainNode *n)
+{
+  if (n != hook) {
+    if (hook->nodesRefCount)
+      n->member->deref();
+    n->next->prev = n->prev;
+    n->prev->next = n->next;
+    delete n;
+  }
+}
+
+void ScopeChain::refAll() const
+{
+  for (ScopeChainNode *n = hook->next; n != hook; n = n->next)
+    n->member->ref();
+}
+
+void ScopeChain::derefAll() const
+{
+  for (ScopeChainNode *n = hook->next; n != hook; n = n->next)
+    n->member->deref();
+}
+
+void ScopeChain::swap(ScopeChain &other)
+{
+  if (!m_needsMarking)
+    if (other.hook->nodesRefCount++ == 0)
+      other.refAll();
+  if (!other.m_needsMarking)
+    if (hook->nodesRefCount++ == 0)
+      refAll();
+
+  if (!m_needsMarking)
+    if (--hook->nodesRefCount == 0)
+      derefAll();
+  if (!other.m_needsMarking)
+    if (--other.hook->nodesRefCount == 0)
+      other.derefAll();
+
+  ScopeChainHookNode *tmp = hook;
+  hook = other.hook;
+  other.hook = tmp;
+}
+
+bool ScopeChain::isEmpty() const
+{
+    return hook->next == hook;
+}
+
+} // namespace KJS
diff --git a/JavaScriptCore/kjs/scope_chain.h b/JavaScriptCore/kjs/scope_chain.h
new file mode 100644
index 0000000..469eb17
--- /dev/null
+++ b/JavaScriptCore/kjs/scope_chain.h
@@ -0,0 +1,147 @@
+// -*- 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)
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public License
+ *  along with this library; see the file COPYING.LIB.  If not, write to
+ *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ *  Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef KJS_SCOPE_CHAIN_H
+#define KJS_SCOPE_CHAIN_H
+
+#include "value.h"
+
+// internal data types
+
+namespace KJS {
+
+  class ScopeChain;
+  class ScopeChainIterator;
+  class ScopeChainNode;
+  class ScopeChainHookNode;
+
+  /**
+   * @short Iterator for @ref KJS::ScopeChain objects.
+   */
+  class ScopeChainIterator {
+    friend class ScopeChain;
+    ScopeChainIterator() : node(0) { }
+    ScopeChainIterator(ScopeChainNode *n) : node(n) { }
+  public:
+    /**
+     * Construct an iterator that points to the first element of the list.
+     * @param l The list the iterator will operate on.
+     */
+    ScopeChainIterator(const ScopeChain &l);
+    /**
+     * Dereference the iterator.
+     * @return A pointer to the element the iterator operates on.
+     */
+    ValueImp* operator->() const;
+    Value operator*() const;
+    /**
+     * Postfix increment operator.
+     * @return The element after the increment.
+     */
+    Value operator++();
+    /**
+     * Prefix increment operator.
+     */
+    Value operator++(int);
+    /**
+     * Compare the iterator with another one.
+     * @return True if the two iterators operate on the same list element.
+     * False otherwise.
+     */
+    bool operator==(const ScopeChainIterator &it) const { return node == it.node; }
+    /**
+     * Check for inequality with another iterator.
+     * @return True if the two iterators operate on different list elements.
+     */
+    bool operator!=(const ScopeChainIterator &it) const { return node != it.node; }
+  private:
+    ScopeChainNode *node;
+  };
+
+  /**
+   * @short Native list type.
+   *
+   * ScopeChain is a native ECMAScript type. ScopeChain values are only used for
+   * intermediate results of expression evaluation and cannot be stored
+   * as properties of objects.
+   *
+   * The list is explicitly shared. Note that while copy() returns a
+   * copy of the list the referenced objects are still shared.
+   */
+  class ScopeChain {
+    friend class ScopeChainIterator;
+  public:
+    ScopeChain(bool needsMarking = false);
+    ScopeChain(const ScopeChain& l);
+    ScopeChain &operator=(const ScopeChain& l);
+
+    ~ScopeChain();
+
+    /**
+     * Insert an object at the beginning of the list.
+     *
+     * @param val Pointer to object.
+     */
+    void prepend(const Value& val);
+    /**
+     * Remove the element at the beginning of the list.
+     */
+    void removeFirst();
+    /**
+     * Returns a shallow copy of the list. Ownership is passed to the user
+     * who is responsible for deleting the list then.
+     */
+    ScopeChain copy() const;
+    /**
+     * @return A @ref KJS::ScopeChainIterator pointing to the first element.
+     */
+    ScopeChainIterator begin() const;
+    /**
+     * @return A @ref KJS::ScopeChainIterator pointing to the last element.
+     */
+    ScopeChainIterator end() const;
+
+    bool isEmpty() const;
+    
+    void mark() const;
+
+    // temporary
+    void prependList(const ScopeChain &);
+    void append(const Value &);
+
+  private:
+
+    void prepend(ValueImp *val);
+    void erase(ScopeChainNode *n);
+    void clearInternal();
+    void refAll() const;
+    void derefAll() const;
+    void swap(ScopeChain &other);
+    
+    ScopeChainHookNode *hook;
+    bool m_needsMarking;
+  };
+  
+}; // namespace
+
+#endif // KJS_SCOPE_CHAIN_H
diff --git a/JavaScriptCore/kjs/types.cpp b/JavaScriptCore/kjs/types.cpp
index fdb963f..c97b0b4 100644
--- a/JavaScriptCore/kjs/types.cpp
+++ b/JavaScriptCore/kjs/types.cpp
@@ -48,8 +48,8 @@ namespace KJS {
   };
 
   struct ListHookNode : public ListNode {
-    ListHookNode(bool needsMarking) : ListNode(Value(), this, this),
-        listRefCount(1), nodesRefCount(needsMarking ? 0 : 1) { }
+    ListHookNode() : ListNode(0, this, this),
+        listRefCount(1), nodesRefCount(1) { }
     int listRefCount;
     int nodesRefCount;
   };
@@ -94,11 +94,11 @@ Value ListIterator::operator--(int)
 
 // ------------------------------ List -----------------------------------------
 
-List::List(bool needsMarking) : hook(new ListHookNode(needsMarking)), m_needsMarking(needsMarking)
+List::List() : hook(new ListHookNode)
 {
 }
 
-List::List(const List& l) : hook(l.hook), m_needsMarking(false)
+List::List(const List& l) : hook(l.hook)
 {
   ++hook->listRefCount;
   if (hook->nodesRefCount++ == 0)
@@ -113,9 +113,8 @@ List& List::operator=(const List& l)
 
 List::~List()
 {
-  if (!m_needsMarking)
-    if (--hook->nodesRefCount == 0)
-      derefAll();
+  if (--hook->nodesRefCount == 0)
+    derefAll();
   
   if (--hook->listRefCount == 0) {
     assert(hook->nodesRefCount == 0);
@@ -299,20 +298,6 @@ void List::derefAll()
 
 void List::swap(List &other)
 {
-  if (!m_needsMarking)
-    if (other.hook->nodesRefCount++ == 0)
-      other.refAll();
-  if (!other.m_needsMarking)
-    if (hook->nodesRefCount++ == 0)
-      refAll();
-
-  if (!m_needsMarking)
-    if (--hook->nodesRefCount == 0)
-      derefAll();
-  if (!other.m_needsMarking)
-    if (--other.hook->nodesRefCount == 0)
-      other.derefAll();
-
   ListHookNode *tmp = hook;
   hook = other.hook;
   other.hook = tmp;
diff --git a/JavaScriptCore/kjs/types.h b/JavaScriptCore/kjs/types.h
index 7b36830..e74c8ad 100644
--- a/JavaScriptCore/kjs/types.h
+++ b/JavaScriptCore/kjs/types.h
@@ -24,12 +24,11 @@
 #ifndef _KJS_TYPES_H_
 #define _KJS_TYPES_H_
 
-// internal data types
-
 #include "value.h"
-#include "reference.h"
 #include "completion.h"
 
+// internal data types
+
 namespace KJS {
 
   class List;
@@ -101,7 +100,7 @@ namespace KJS {
   class List {
     friend class ListIterator;
   public:
-    List(bool needsMarking = false);
+    List();
     List(const List& l);
     List &operator=(const List& l);
       
@@ -198,10 +197,9 @@ namespace KJS {
     void swap(List &other);
     
     ListHookNode *hook;
-    bool m_needsMarking;
   };
   
-  typedef List ArgumentList;
+  typedef List List;
 
 }; // namespace
 
diff --git a/WebCore/ChangeLog-2002-12-03 b/WebCore/ChangeLog-2002-12-03
index aa90a51..34b925c 100644
--- a/WebCore/ChangeLog-2002-12-03
+++ b/WebCore/ChangeLog-2002-12-03
@@ -1,3 +1,13 @@
+2002-11-21  Darin Adler  <darin at apple.com>
+
+        * khtml/ecma/kjs_dom.cpp: (DOMNode::eventHandlerScope): List -> ScopeChain.
+        * khtml/ecma/kjs_dom.h: List -> ScopeChain.
+        * khtml/ecma/kjs_events.cpp: (JSEventListener::handleEvent): List -> ScopeChain.
+        * khtml/ecma/kjs_html.cpp: (KJS::HTMLElement::eventHandlerScope): List -> ScopeChain.
+        * khtml/ecma/kjs_html.h: List -> ScopeChain.
+
+        * force-js-clean-timestamp: Not sure this is required, but better safe than sorry.
+
 2002-11-21  Maciej Stachowiak  <mjs at apple.com>
 
         * force-js-clean-timestamp: Touch so other people's builds work.
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index aa90a51..34b925c 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,13 @@
+2002-11-21  Darin Adler  <darin at apple.com>
+
+        * khtml/ecma/kjs_dom.cpp: (DOMNode::eventHandlerScope): List -> ScopeChain.
+        * khtml/ecma/kjs_dom.h: List -> ScopeChain.
+        * khtml/ecma/kjs_events.cpp: (JSEventListener::handleEvent): List -> ScopeChain.
+        * khtml/ecma/kjs_html.cpp: (KJS::HTMLElement::eventHandlerScope): List -> ScopeChain.
+        * khtml/ecma/kjs_html.h: List -> ScopeChain.
+
+        * force-js-clean-timestamp: Not sure this is required, but better safe than sorry.
+
 2002-11-21  Maciej Stachowiak  <mjs at apple.com>
 
         * force-js-clean-timestamp: Touch so other people's builds work.
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index aa90a51..34b925c 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,13 @@
+2002-11-21  Darin Adler  <darin at apple.com>
+
+        * khtml/ecma/kjs_dom.cpp: (DOMNode::eventHandlerScope): List -> ScopeChain.
+        * khtml/ecma/kjs_dom.h: List -> ScopeChain.
+        * khtml/ecma/kjs_events.cpp: (JSEventListener::handleEvent): List -> ScopeChain.
+        * khtml/ecma/kjs_html.cpp: (KJS::HTMLElement::eventHandlerScope): List -> ScopeChain.
+        * khtml/ecma/kjs_html.h: List -> ScopeChain.
+
+        * force-js-clean-timestamp: Not sure this is required, but better safe than sorry.
+
 2002-11-21  Maciej Stachowiak  <mjs at apple.com>
 
         * force-js-clean-timestamp: Touch so other people's builds work.
diff --git a/WebCore/force-js-clean-timestamp b/WebCore/force-js-clean-timestamp
index ad1f6e9..f188739 100644
--- a/WebCore/force-js-clean-timestamp
+++ b/WebCore/force-js-clean-timestamp
@@ -1 +1 @@
-PRopertyMap size change 11/21 - Maciej
+List -> ScopeChain 11/21 - Darin
diff --git a/WebCore/khtml/ecma/kjs_dom.cpp b/WebCore/khtml/ecma/kjs_dom.cpp
index b77b951..5b41a31 100644
--- a/WebCore/khtml/ecma/kjs_dom.cpp
+++ b/WebCore/khtml/ecma/kjs_dom.cpp
@@ -415,9 +415,9 @@ Value DOMNode::getListener(int eventId) const
 	return Null();
 }
 
-List DOMNode::eventHandlerScope(ExecState *) const
+ScopeChain DOMNode::eventHandlerScope(ExecState *) const
 {
-  return List::empty();
+  return ScopeChain();
 }
 
 Value DOMNodeProtoFunc::tryCall(ExecState *exec, Object &thisObj, const List &args)
diff --git a/WebCore/khtml/ecma/kjs_dom.h b/WebCore/khtml/ecma/kjs_dom.h
index 7463db4..67bd378 100644
--- a/WebCore/khtml/ecma/kjs_dom.h
+++ b/WebCore/khtml/ecma/kjs_dom.h
@@ -51,7 +51,7 @@ namespace KJS {
     virtual UString toString(ExecState *exec) const;
     void setListener(ExecState *exec, int eventId, Value func) const;
     Value getListener(int eventId) const;
-    virtual List eventHandlerScope(ExecState *exec) const;
+    virtual ScopeChain eventHandlerScope(ExecState *exec) const;
 
     enum { NodeName, NodeValue, NodeType, ParentNode, ParentElement,
            ChildNodes, FirstChild, LastChild, PreviousSibling, NextSibling,
diff --git a/WebCore/khtml/ecma/kjs_events.cpp b/WebCore/khtml/ecma/kjs_events.cpp
index ad9a9aa..f9c5cc8 100644
--- a/WebCore/khtml/ecma/kjs_events.cpp
+++ b/WebCore/khtml/ecma/kjs_events.cpp
@@ -72,13 +72,13 @@ void JSEventListener::handleEvent(DOM::Event &evt)
     // Add the event's target element to the scope
     // (and the document, and the form - see KJS::HTMLElement::eventHandlerScope)
     Object thisObj = Object::dynamicCast(getDOMNode(exec,evt.currentTarget()));
-    List scope;
-    List oldScope = listener.scope();
+    ScopeChain scope;
+    ScopeChain oldScope = listener.scope();
     //if (thisVal.type() != NullType)
     if ( !thisObj.isNull() ) {
       scope = static_cast<DOMNode*>(thisObj.imp())->eventHandlerScope(exec);
       if ( !scope.isEmpty() ) {
-        List curScope = oldScope.copy();
+        ScopeChain curScope = oldScope.copy();
         curScope.prependList( scope );
         listener.setScope( curScope );
       }
diff --git a/WebCore/khtml/ecma/kjs_html.cpp b/WebCore/khtml/ecma/kjs_html.cpp
index 8bfa8a8..dd95a3d 100644
--- a/WebCore/khtml/ecma/kjs_html.cpp
+++ b/WebCore/khtml/ecma/kjs_html.cpp
@@ -1739,11 +1739,11 @@ UString KJS::HTMLElement::toString(ExecState *exec) const
     return DOMElement::toString(exec);
 }
 
-List KJS::HTMLElement::eventHandlerScope(ExecState *exec) const
+ScopeChain KJS::HTMLElement::eventHandlerScope(ExecState *exec) const
 {
   DOM::HTMLElement element = static_cast<DOM::HTMLElement>(node);
 
-  List scope;
+  ScopeChain scope;
   // The element is the first one, so that it is the most prioritary
   scope.append(getDOMNode(exec,element));
 
diff --git a/WebCore/khtml/ecma/kjs_html.h b/WebCore/khtml/ecma/kjs_html.h
index 660180d..8d2affd 100644
--- a/WebCore/khtml/ecma/kjs_html.h
+++ b/WebCore/khtml/ecma/kjs_html.h
@@ -61,7 +61,7 @@ namespace KJS {
     void putValue(ExecState *exec, int token, const Value& value, int);
     virtual bool hasProperty(ExecState *exec, const Identifier &propertyName) const;
     virtual UString toString(ExecState *exec) const;
-    virtual List eventHandlerScope(ExecState *exec) const;
+    virtual ScopeChain eventHandlerScope(ExecState *exec) const;
     virtual const ClassInfo* classInfo() const;
     static const ClassInfo info;
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list