From 414f04715c226ea7e26c326217e02ba02e6a8146 Mon Sep 17 00:00:00 2001
From: "Fuji, Goro" <goro-fuji@cookpad.com>
Date: Sun, 13 Oct 2013 11:42:53 +0900
Subject: [PATCH] close #279; do not raise compile errors for static functions

---
 src/classdef.jsx                     |  2 +-
 t/run/357.issue279-static-method.jsx | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)
 create mode 100644 t/run/357.issue279-static-method.jsx

diff --git a/src/classdef.jsx b/src/classdef.jsx
index deb593b7..cf097fbe 100644
--- a/src/classdef.jsx
+++ b/src/classdef.jsx
@@ -882,7 +882,7 @@ class ClassDefinition implements Stashable {
 			}
 			if (! Util.typesAreEqual((this._members[i] as MemberFunctionDefinition).getArgumentTypes(), member.getArgumentTypes()))
 				continue;
-			if ((! isCheckingInterface) && (member.flags() & ClassDefinition.IS_OVERRIDE) == 0) {
+			if ((! isCheckingInterface) && ((member.flags() | this._members[i].flags()) & ClassDefinition.IS_STATIC) == 0 && (member.flags() & ClassDefinition.IS_OVERRIDE) == 0) {
 				var error = new CompileError(member.getNameToken(), "overriding functions must have 'override' attribute set");
 				error.addCompileNote(new CompileNote(this._members[i].getNameToken(), Util.format("defined in base class '%1'", [this.classFullName()])));
 				context.errors.push(error);
diff --git a/t/run/357.issue279-static-method.jsx b/t/run/357.issue279-static-method.jsx
new file mode 100644
index 00000000..cc7ee1de
--- /dev/null
+++ b/t/run/357.issue279-static-method.jsx
@@ -0,0 +1,21 @@
+/*EXPECTED
+ok
+*/
+
+class StaticParent
+{
+    static function f() : void { }
+}
+
+class StaticInstanceChild extends StaticParent
+{
+    function f() : void { }
+}
+
+class _Main {
+  static function main(args : string[]):void {
+    log "ok";
+  }
+}
+
+// vim: set expandtab tabstop=2 shiftwidth=2 ft=jsx: