"GOT", but the "O" is a cute, smiling sun Index | Thread

From:
Tom Jones <thj@freebsd.org>
Subject:
Detect objective c function prototypes
To:
gameoftrees@openbsd.org
Date:
Thu, 29 Sep 2022 10:37:33 +0100

Download raw body.

When searching for function prototypes pick up on objective-c class and
object methods. 

Add tests for both.


- Tom
From c198c15288b1ff9ef990ba7e327897f2a7a5788e Mon Sep 17 00:00:00 2001
From: Tom Jones <thj@freebsd.org>
Date: Thu, 29 Sep 2022 11:32:27 +0200
Subject: [PATCH] Detect objective-c class function and methods

---
 lib/diff_output.c        |  3 ++-
 test/expect126.diff      | 11 +++++++++++
 test/expect127.diff      | 11 +++++++++++
 test/test126.left-p.txt  | 29 +++++++++++++++++++++++++++++
 test/test126.right-p.txt | 31 +++++++++++++++++++++++++++++++
 test/test127.left-p.txt  | 29 +++++++++++++++++++++++++++++
 test/test127.right-p.txt | 29 +++++++++++++++++++++++++++++
 7 files changed, 142 insertions(+), 1 deletion(-)
 create mode 100644 test/expect126.diff
 create mode 100644 test/expect127.diff
 create mode 100644 test/test126.left-p.txt
 create mode 100644 test/test126.right-p.txt
 create mode 100644 test/test127.left-p.txt
 create mode 100644 test/test127.right-p.txt

diff --git a/lib/diff_output.c b/lib/diff_output.c
index bc44a51..1c4cf1d 100644
--- a/lib/diff_output.c
+++ b/lib/diff_output.c
@@ -262,7 +262,8 @@ diff_output_trailing_newline_msg(struct diff_output_info *outinfo, FILE *dest,
 static bool
 is_function_prototype(unsigned char ch)
 {
-	return (isalpha(ch) || ch == '_' || ch == '$');
+	return (isalpha(ch) || ch == '_' || ch == '$' ||
+		ch == '-' || ch == '+');
 }
 
 #define begins_with(s, pre) (strncmp(s, pre, sizeof(pre)-1) == 0)
diff --git a/test/expect126.diff b/test/expect126.diff
new file mode 100644
index 0000000..1dd88d6
--- /dev/null
+++ b/test/expect126.diff
@@ -0,0 +1,11 @@
+--- test126.left-p.txt
++++ test126.right-p.txt
+@@ -25,5 +25,7 @@ + (BOOL) isEdible:(NSString *)mushroom
+ 
+ + (BOOL) isEdible:(NSString *)mushroom
+ {
+-	return TRUE;
++	/* With a solid guide book (such as Phillips 2006) assume we can't eat
++	 * the fungus */
++	return FALSE;
+ }
diff --git a/test/expect127.diff b/test/expect127.diff
new file mode 100644
index 0000000..56ddbf9
--- /dev/null
+++ b/test/expect127.diff
@@ -0,0 +1,11 @@
+--- test127.left-p.txt
++++ test127.right-p.txt
+@@ -18,7 +18,7 @@ - (long) readOffset:(FILE*)file
+ 		return offset;
+ 	} else {
+ 		int offset;
+-		fread(&offset, sizeof(int), 1, file);
++		fread(&offset-1, sizeof(int), 1, file);
+ 		return offset;
+ 	}
+ }
diff --git a/test/test126.left-p.txt b/test/test126.left-p.txt
new file mode 100644
index 0000000..7b4c50c
--- /dev/null
+++ b/test/test126.left-p.txt
@@ -0,0 +1,29 @@
+static void
+doSomethingThenPrintHello(int test)
+{
+	test = test << 4;
+	if (test % 8 == 6) {
+		return;
+	}
+
+	print("goodbye\n");
+}
+
+
+- (long) readOffset:(FILE*)file
+{
+	if( version >= 11){
+		long offset;
+		fread(&offset, sizeof(long), 1, file);
+		return offset;
+	} else {
+		int offset;
+		fread(&offset, sizeof(int), 1, file);
+		return offset;
+	}
+}
+
++ (BOOL) isEdible:(NSString *)mushroom
+{
+	return TRUE;
+}
diff --git a/test/test126.right-p.txt b/test/test126.right-p.txt
new file mode 100644
index 0000000..37a9a76
--- /dev/null
+++ b/test/test126.right-p.txt
@@ -0,0 +1,31 @@
+static void
+doSomethingThenPrintHello(int test)
+{
+	test = test << 4;
+	if (test % 8 == 6) {
+		return;
+	}
+
+	print("goodbye\n");
+}
+
+
+- (long) readOffset:(FILE*)file
+{
+	if( version >= 11){
+		long offset;
+		fread(&offset, sizeof(long), 1, file);
+		return offset;
+	} else {
+		int offset;
+		fread(&offset, sizeof(int), 1, file);
+		return offset;
+	}
+}
+
++ (BOOL) isEdible:(NSString *)mushroom
+{
+	/* With a solid guide book (such as Phillips 2006) assume we can't eat
+	 * the fungus */
+	return FALSE;
+}
diff --git a/test/test127.left-p.txt b/test/test127.left-p.txt
new file mode 100644
index 0000000..7b4c50c
--- /dev/null
+++ b/test/test127.left-p.txt
@@ -0,0 +1,29 @@
+static void
+doSomethingThenPrintHello(int test)
+{
+	test = test << 4;
+	if (test % 8 == 6) {
+		return;
+	}
+
+	print("goodbye\n");
+}
+
+
+- (long) readOffset:(FILE*)file
+{
+	if( version >= 11){
+		long offset;
+		fread(&offset, sizeof(long), 1, file);
+		return offset;
+	} else {
+		int offset;
+		fread(&offset, sizeof(int), 1, file);
+		return offset;
+	}
+}
+
++ (BOOL) isEdible:(NSString *)mushroom
+{
+	return TRUE;
+}
diff --git a/test/test127.right-p.txt b/test/test127.right-p.txt
new file mode 100644
index 0000000..06c3e9b
--- /dev/null
+++ b/test/test127.right-p.txt
@@ -0,0 +1,29 @@
+static void
+doSomethingThenPrintHello(int test)
+{
+	test = test << 4;
+	if (test % 8 == 6) {
+		return;
+	}
+
+	print("goodbye\n");
+}
+
+
+- (long) readOffset:(FILE*)file
+{
+	if( version >= 11){
+		long offset;
+		fread(&offset, sizeof(long), 1, file);
+		return offset;
+	} else {
+		int offset;
+		fread(&offset-1, sizeof(int), 1, file);
+		return offset;
+	}
+}
+
++ (BOOL) isEdible:(NSString *)mushroom
+{
+	return TRUE;
+}
-- 
2.35.1