You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2015/05/07 00:18:47 UTC
[21/23] lucy-clownfish git commit: Disallow Go keywords as param
names.
Disallow Go keywords as param names.
Append an underscore to the end -- e.g. for the param `type`,
substitute `type_`. It's ugly and not Go style, but it's bulletproof
because we it will never clash with lowerCamelCase.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/9811a286
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/9811a286
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/9811a286
Branch: refs/heads/master
Commit: 9811a28660992d06caef7a2ebb926291bafb47ff
Parents: be31f59
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Thu Apr 9 19:02:47 2015 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Wed May 6 14:28:16 2015 -0700
----------------------------------------------------------------------
compiler/src/CFCGoTypeMap.c | 42 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/9811a286/compiler/src/CFCGoTypeMap.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCGoTypeMap.c b/compiler/src/CFCGoTypeMap.c
index 50aaa32..dd3f374 100644
--- a/compiler/src/CFCGoTypeMap.c
+++ b/compiler/src/CFCGoTypeMap.c
@@ -15,6 +15,7 @@
*/
#include <string.h>
+#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
@@ -64,6 +65,36 @@ static struct {
static int num_conversions = sizeof(conversions) / sizeof(conversions[0]);
+static const char* go_keywords[] = {
+ "break",
+ "case",
+ "chan",
+ "const",
+ "continue",
+ "default",
+ "defer",
+ "else",
+ "fallthrough",
+ "for",
+ "func",
+ "go",
+ "goto",
+ "if",
+ "import",
+ "interface",
+ "map",
+ "package",
+ "range",
+ "return",
+ "select",
+ "struct",
+ "switch",
+ "type",
+ "var"
+};
+
+static int num_go_keywords = sizeof(go_keywords) / sizeof(go_keywords[0]);
+
/* TODO: Optimize local conversions by creating a static wrapper function
* which takes a buffer and allocates memory only if the buffer isn't big
* enough. */
@@ -204,6 +235,17 @@ CFCGoTypeMap_go_arg_name(CFCParamList *param_list, size_t tick, char *buf,
if (buf_len < max_required || buf_len < 5) {
CFCUtil_die("Buffer length too short: %d", buf_len);
}
+
+ // If the argument name is a Go keyword, append an underscore. This is
+ // ugly but bulletproof.
+ for (int i = 0; i < num_go_keywords; i++) {
+ if (strcmp(orig, go_keywords[i]) == 0) {
+ sprintf(buf, "%s_", orig);
+ return;
+ }
+ }
+
+ // Transform into lowerCamelCase.
size_t dest_tick = 0;
int last_was_underscore = 0;
for (size_t i = 0; i <= strlen(orig); i++) {