bind: add nil and bool to ObjC keyword list

While we're here, sort the keyword list.

Fixes golang/go#22875

Change-Id: I31844c3d66f959bb0dc47eb3062e41f75d7b765e
Reviewed-on: https://go-review.googlesource.com/100795
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
diff --git a/bind/genobjc.go b/bind/genobjc.go
index 92c39ab..8c8ff85 100644
--- a/bind/genobjc.go
+++ b/bind/genobjc.go
@@ -1392,9 +1392,10 @@
 }
 
 var objcNameReplacer = newNameSanitizer([]string{
-	"void", "char", "short", "int", "long", "float", "double", "signed",
-	"unsigned", "id", "const", "volatile", "in", "out", "inout", "bycopy",
-	"byref", "oneway", "self", "super", "init"})
+	"bool", "bycopy", "byref", "char", "const", "double", "float",
+	"id", "in", "init", "inout", "int", "long", "nil", "oneway",
+	"out", "self", "short", "signed", "super", "unsigned", "void",
+	"volatile"})
 
 const (
 	objcPreamble = `// Objective-C API for talking to %[1]s Go package.
diff --git a/bind/testdata/keywords.go b/bind/testdata/keywords.go
index d5a7733..6a04f0b 100644
--- a/bind/testdata/keywords.go
+++ b/bind/testdata/keywords.go
@@ -58,6 +58,8 @@
 	False()
 	Null()
 	True()
+	Bool()
+	Nil()
 }
 
 func Const(id string)        {}
diff --git a/bind/testdata/keywords.go.golden b/bind/testdata/keywords.go.golden
index 4ad33bc..9d80a51 100644
--- a/bind/testdata/keywords.go.golden
+++ b/bind/testdata/keywords.go.golden
@@ -35,6 +35,13 @@
 	v.Assert()
 }
 
+//export proxykeywords_KeywordCaller_Bool
+func proxykeywords_KeywordCaller_Bool(refnum C.int32_t) {
+	ref := _seq.FromRefNum(int32(refnum))
+	v := ref.Get().(keywords.KeywordCaller)
+	v.Bool()
+}
+
 //export proxykeywords_KeywordCaller_Boolean
 func proxykeywords_KeywordCaller_Boolean(refnum C.int32_t) {
 	ref := _seq.FromRefNum(int32(refnum))
@@ -245,6 +252,13 @@
 	v.New()
 }
 
+//export proxykeywords_KeywordCaller_Nil
+func proxykeywords_KeywordCaller_Nil(refnum C.int32_t) {
+	ref := _seq.FromRefNum(int32(refnum))
+	v := ref.Get().(keywords.KeywordCaller)
+	v.Nil()
+}
+
 //export proxykeywords_KeywordCaller_Null
 func proxykeywords_KeywordCaller_Null(refnum C.int32_t) {
 	ref := _seq.FromRefNum(int32(refnum))
@@ -404,6 +418,10 @@
 	C.cproxykeywords_KeywordCaller_Assert(C.int32_t(p.Bind_proxy_refnum__()))
 }
 
+func (p *proxykeywords_KeywordCaller) Bool() {
+	C.cproxykeywords_KeywordCaller_Bool(C.int32_t(p.Bind_proxy_refnum__()))
+}
+
 func (p *proxykeywords_KeywordCaller) Boolean() {
 	C.cproxykeywords_KeywordCaller_Boolean(C.int32_t(p.Bind_proxy_refnum__()))
 }
@@ -524,6 +542,10 @@
 	C.cproxykeywords_KeywordCaller_New(C.int32_t(p.Bind_proxy_refnum__()))
 }
 
+func (p *proxykeywords_KeywordCaller) Nil() {
+	C.cproxykeywords_KeywordCaller_Nil(C.int32_t(p.Bind_proxy_refnum__()))
+}
+
 func (p *proxykeywords_KeywordCaller) Null() {
 	C.cproxykeywords_KeywordCaller_Null(C.int32_t(p.Bind_proxy_refnum__()))
 }
diff --git a/bind/testdata/keywords.java.c.golden b/bind/testdata/keywords.java.c.golden
index 5e1fa46..933410b 100644
--- a/bind/testdata/keywords.java.c.golden
+++ b/bind/testdata/keywords.java.c.golden
@@ -13,6 +13,7 @@
 jmethodID proxy_class_keywords_KeywordCaller_cons;
 static jmethodID mid_KeywordCaller_Abstract;
 static jmethodID mid_KeywordCaller_Assert;
+static jmethodID mid_KeywordCaller_Bool;
 static jmethodID mid_KeywordCaller_Boolean;
 static jmethodID mid_KeywordCaller_Break;
 static jmethodID mid_KeywordCaller_Byte;
@@ -43,6 +44,7 @@
 static jmethodID mid_KeywordCaller_Long;
 static jmethodID mid_KeywordCaller_Native;
 static jmethodID mid_KeywordCaller_New;
+static jmethodID mid_KeywordCaller_Nil;
 static jmethodID mid_KeywordCaller_Null;
 static jmethodID mid_KeywordCaller_Package;
 static jmethodID mid_KeywordCaller_Private;
@@ -74,6 +76,7 @@
     clazz = (*env)->FindClass(env, "keywords/KeywordCaller");
     mid_KeywordCaller_Abstract = (*env)->GetMethodID(env, clazz, "abstract_", "()V");
     mid_KeywordCaller_Assert = (*env)->GetMethodID(env, clazz, "assert_", "()V");
+    mid_KeywordCaller_Bool = (*env)->GetMethodID(env, clazz, "bool", "()V");
     mid_KeywordCaller_Boolean = (*env)->GetMethodID(env, clazz, "boolean_", "()V");
     mid_KeywordCaller_Break = (*env)->GetMethodID(env, clazz, "break_", "()V");
     mid_KeywordCaller_Byte = (*env)->GetMethodID(env, clazz, "byte_", "()V");
@@ -104,6 +107,7 @@
     mid_KeywordCaller_Long = (*env)->GetMethodID(env, clazz, "long_", "()V");
     mid_KeywordCaller_Native = (*env)->GetMethodID(env, clazz, "native_", "()V");
     mid_KeywordCaller_New = (*env)->GetMethodID(env, clazz, "new_", "()V");
+    mid_KeywordCaller_Nil = (*env)->GetMethodID(env, clazz, "nil", "()V");
     mid_KeywordCaller_Null = (*env)->GetMethodID(env, clazz, "null_", "()V");
     mid_KeywordCaller_Package = (*env)->GetMethodID(env, clazz, "package_", "()V");
     mid_KeywordCaller_Private = (*env)->GetMethodID(env, clazz, "private_", "()V");
@@ -167,6 +171,19 @@
 }
 
 JNIEXPORT void JNICALL
+Java_keywords_Keywords_00024proxyKeywordCaller_bool(JNIEnv* env, jobject __this__) {
+    int32_t o = go_seq_to_refnum_go(env, __this__);
+    proxykeywords_KeywordCaller_Bool(o);
+}
+
+void cproxykeywords_KeywordCaller_Bool(int32_t refnum) {
+    JNIEnv *env = go_seq_push_local_frame(0);
+    jobject o = go_seq_from_refnum(env, refnum, proxy_class_keywords_KeywordCaller, proxy_class_keywords_KeywordCaller_cons);
+    (*env)->CallVoidMethod(env, o, mid_KeywordCaller_Bool);
+    go_seq_pop_local_frame(env);
+}
+
+JNIEXPORT void JNICALL
 Java_keywords_Keywords_00024proxyKeywordCaller_boolean_1(JNIEnv* env, jobject __this__) {
     int32_t o = go_seq_to_refnum_go(env, __this__);
     proxykeywords_KeywordCaller_Boolean(o);
@@ -557,6 +574,19 @@
 }
 
 JNIEXPORT void JNICALL
+Java_keywords_Keywords_00024proxyKeywordCaller_nil(JNIEnv* env, jobject __this__) {
+    int32_t o = go_seq_to_refnum_go(env, __this__);
+    proxykeywords_KeywordCaller_Nil(o);
+}
+
+void cproxykeywords_KeywordCaller_Nil(int32_t refnum) {
+    JNIEnv *env = go_seq_push_local_frame(0);
+    jobject o = go_seq_from_refnum(env, refnum, proxy_class_keywords_KeywordCaller, proxy_class_keywords_KeywordCaller_cons);
+    (*env)->CallVoidMethod(env, o, mid_KeywordCaller_Nil);
+    go_seq_pop_local_frame(env);
+}
+
+JNIEXPORT void JNICALL
 Java_keywords_Keywords_00024proxyKeywordCaller_null_1(JNIEnv* env, jobject __this__) {
     int32_t o = go_seq_to_refnum_go(env, __this__);
     proxykeywords_KeywordCaller_Null(o);
diff --git a/bind/testdata/keywords.java.golden b/bind/testdata/keywords.java.golden
index 23d2d6c..9839bfe 100644
--- a/bind/testdata/keywords.java.golden
+++ b/bind/testdata/keywords.java.golden
@@ -9,6 +9,7 @@
 public interface KeywordCaller {
     public void abstract_();
     public void assert_();
+    public void bool();
     public void boolean_();
     public void break_();
     public void byte_();
@@ -39,6 +40,7 @@
     public void long_();
     public void native_();
     public void new_();
+    public void nil();
     public void null_();
     public void package_();
     public void private_();
@@ -97,6 +99,7 @@
         
         public native void abstract_();
         public native void assert_();
+        public native void bool();
         public native void boolean_();
         public native void break_();
         public native void byte_();
@@ -127,6 +130,7 @@
         public native void long_();
         public native void native_();
         public native void new_();
+        public native void nil();
         public native void null_();
         public native void package_();
         public native void private_();
diff --git a/bind/testdata/keywords.java.h.golden b/bind/testdata/keywords.java.h.golden
index 23886d7..4af5e9f 100644
--- a/bind/testdata/keywords.java.h.golden
+++ b/bind/testdata/keywords.java.h.golden
@@ -15,6 +15,8 @@
 
 void cproxykeywords_KeywordCaller_Assert(int32_t refnum);
 
+void cproxykeywords_KeywordCaller_Bool(int32_t refnum);
+
 void cproxykeywords_KeywordCaller_Boolean(int32_t refnum);
 
 void cproxykeywords_KeywordCaller_Break(int32_t refnum);
@@ -75,6 +77,8 @@
 
 void cproxykeywords_KeywordCaller_New(int32_t refnum);
 
+void cproxykeywords_KeywordCaller_Nil(int32_t refnum);
+
 void cproxykeywords_KeywordCaller_Null(int32_t refnum);
 
 void cproxykeywords_KeywordCaller_Package(int32_t refnum);
diff --git a/bind/testdata/keywords.objc.go.h.golden b/bind/testdata/keywords.objc.go.h.golden
index ed1f241..0e16f5a 100644
--- a/bind/testdata/keywords.objc.go.h.golden
+++ b/bind/testdata/keywords.objc.go.h.golden
@@ -12,6 +12,8 @@
 
 void cproxykeywords_KeywordCaller_Assert(int32_t refnum);
 
+void cproxykeywords_KeywordCaller_Bool(int32_t refnum);
+
 void cproxykeywords_KeywordCaller_Boolean(int32_t refnum);
 
 void cproxykeywords_KeywordCaller_Break(int32_t refnum);
@@ -72,6 +74,8 @@
 
 void cproxykeywords_KeywordCaller_New(int32_t refnum);
 
+void cproxykeywords_KeywordCaller_Nil(int32_t refnum);
+
 void cproxykeywords_KeywordCaller_Null(int32_t refnum);
 
 void cproxykeywords_KeywordCaller_Package(int32_t refnum);
diff --git a/bind/testdata/keywords.objc.h.golden b/bind/testdata/keywords.objc.h.golden
index f406b48..1ca7325 100644
--- a/bind/testdata/keywords.objc.h.golden
+++ b/bind/testdata/keywords.objc.h.golden
@@ -16,6 +16,7 @@
 @protocol KeywordsKeywordCaller <NSObject>
 - (void)abstract;
 - (void)assert;
+- (void)bool_;
 - (void)boolean;
 - (void)break;
 - (void)byte;
@@ -46,6 +47,7 @@
 - (void)long_;
 - (void)native;
 - (void)new;
+- (void)nil_;
 - (void)null;
 - (void)package;
 - (void)private;
@@ -82,6 +84,7 @@
 - (instancetype)initWithRef:(id)ref;
 - (void)abstract;
 - (void)assert;
+- (void)bool_;
 - (void)boolean;
 - (void)break;
 - (void)byte;
@@ -112,6 +115,7 @@
 - (void)long_;
 - (void)native;
 - (void)new;
+- (void)nil_;
 - (void)null;
 - (void)package;
 - (void)private;
diff --git a/bind/testdata/keywords.objc.m.golden b/bind/testdata/keywords.objc.m.golden
index 984f050..1ccbdb3 100644
--- a/bind/testdata/keywords.objc.m.golden
+++ b/bind/testdata/keywords.objc.m.golden
@@ -27,6 +27,11 @@
 	proxykeywords_KeywordCaller_Assert(refnum);
 }
 
+- (void)bool_ {
+	int32_t refnum = go_seq_go_to_refnum(self._ref);
+	proxykeywords_KeywordCaller_Bool(refnum);
+}
+
 - (void)boolean {
 	int32_t refnum = go_seq_go_to_refnum(self._ref);
 	proxykeywords_KeywordCaller_Boolean(refnum);
@@ -177,6 +182,11 @@
 	proxykeywords_KeywordCaller_New(refnum);
 }
 
+- (void)nil_ {
+	int32_t refnum = go_seq_go_to_refnum(self._ref);
+	proxykeywords_KeywordCaller_Nil(refnum);
+}
+
 - (void)null {
 	int32_t refnum = go_seq_go_to_refnum(self._ref);
 	proxykeywords_KeywordCaller_Null(refnum);
@@ -310,6 +320,13 @@
 	}
 }
 
+void cproxykeywords_KeywordCaller_Bool(int32_t refnum) {
+	@autoreleasepool {
+		KeywordsKeywordCaller* o = go_seq_objc_from_refnum(refnum);
+		[o bool_];
+	}
+}
+
 void cproxykeywords_KeywordCaller_Boolean(int32_t refnum) {
 	@autoreleasepool {
 		KeywordsKeywordCaller* o = go_seq_objc_from_refnum(refnum);
@@ -520,6 +537,13 @@
 	}
 }
 
+void cproxykeywords_KeywordCaller_Nil(int32_t refnum) {
+	@autoreleasepool {
+		KeywordsKeywordCaller* o = go_seq_objc_from_refnum(refnum);
+		[o nil_];
+	}
+}
+
 void cproxykeywords_KeywordCaller_Null(int32_t refnum) {
 	@autoreleasepool {
 		KeywordsKeywordCaller* o = go_seq_objc_from_refnum(refnum);