fix for re-assignment to prototype.
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java
index a532eb5..0d4a14f 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java
@@ -94,6 +94,7 @@
 import org.eclipse.dltk.javascript.typeinfo.IRConstructor;
 import org.eclipse.dltk.javascript.typeinfo.IRElement;
 import org.eclipse.dltk.javascript.typeinfo.IRFunctionType;
+import org.eclipse.dltk.javascript.typeinfo.IRLocalType;
 import org.eclipse.dltk.javascript.typeinfo.IRMapType;
 import org.eclipse.dltk.javascript.typeinfo.IRMember;
 import org.eclipse.dltk.javascript.typeinfo.IRMethod;
@@ -1814,8 +1815,19 @@
 				// test if it is not a function override of a super local type class.
 				Set<String> directChildren = null;
 				if (reference.getParent() != null)
-					directChildren = reference.getParent().getDirectChildren(
+					if (reference.getParent().getName()
+							.equals(IRLocalType.PROTOTYPE_PROPERTY)) {
+						directChildren = Collections.emptySet(); // just ignore
+																	// it if it
+																	// is an
+																	// assignment
+																	// to
+																	// prototype
+					} else {
+						directChildren = reference.getParent()
+								.getDirectChildren(
 							IValue.NO_LOCAL_TYPES);
+					}
 				if (directChildren == null
 						|| directChildren.contains(reference.getName())) {
 				reporter.reportProblem(JavaScriptProblems.UNASSIGNABLE_ELEMENT,
diff --git a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java
index 6d871b7..cbc9e85 100644
--- a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java
+++ b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java
@@ -3748,6 +3748,42 @@
 
 	}
 	
+	public void testPrototypeOverrideFunctions() {
+		final StringList code = new StringList();
+		code.add("function Base(name) {");
+		code.add("	this.name = name");
+		code.add("}");
+		code.add("Base.prototype = {");
+		code.add("		method: function(a,b,c) {");
+		code.add("			return 'method1 in base called'");
+		code.add("		}");
+		code.add("}");
+		code.add("Base.prototype.method2 = function(a,b,c) {");
+		code.add("		return 'method2 in base called'");
+		code.add("}");
+		code.add("/**");
+		code.add(" * @extends {Base}");
+		code.add(" */");
+		code.add("function Sub(name, age) {");
+		code.add("	Base.call(this, name)");
+		code.add("	this.age = age");
+		code.add("}");
+		code.add("Sub.prototype = Object.create(Base.prototype, {");
+		code.add("			method: {");
+		code.add("				value: function(a,b) {");
+		code.add("					return 'method1 in sub called'");
+		code.add("				},");
+		code.add("				enumerable: true");
+		code.add("			}");
+		code.add("		})");
+		code.add("Sub.prototype.method2 = function(a,b,c) {");
+		code.add("		return 'method2 in sub called'");
+		code.add("}");
+		final List<IProblem> problems = validate(code.toString());
+		assertEquals(problems.toString(), 0, problems.size());
+
+	}
+	
 	public void testApplyCall() {
 		final StringList code = new StringList();
 		code.add("function test() {var args = Array.prototype.slice.apply(arguments, [1]);");