You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2016/07/22 12:28:46 UTC

[2/9] lucy-clownfish git commit: Add support for JSON Booleans

Add support for JSON Booleans


Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/f0abe457
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/f0abe457
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/f0abe457

Branch: refs/heads/master
Commit: f0abe457859b1b19825fe6f0dc32899444249fdc
Parents: c851ebb
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat Mar 12 18:29:39 2016 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Fri Jul 15 22:09:57 2016 +0200

----------------------------------------------------------------------
 compiler/src/CFCJson.c | 42 ++++++++++++++++++++++++++++++++++++++++++
 compiler/src/CFCJson.h |  4 ++++
 2 files changed, 46 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f0abe457/compiler/src/CFCJson.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCJson.c b/compiler/src/CFCJson.c
index b186492..262b943 100644
--- a/compiler/src/CFCJson.c
+++ b/compiler/src/CFCJson.c
@@ -23,6 +23,7 @@
 struct CFCJson {
     int type;
     char *string;
+    int bool_val;
     struct CFCJson **kids;
     size_t num_kids;
 };
@@ -36,6 +37,9 @@ S_parse_json_string(const char **json);
 static CFCJson*
 S_parse_json_null(const char **json);
 
+static CFCJson*
+S_parse_json_bool(const char **json);
+
 static void
 S_skip_whitespace(const char **json);
 
@@ -115,6 +119,9 @@ S_parse_json_hash(const char **json) {
         else if (*text == 'n') {
             value = S_parse_json_null(&text);
         }
+        else if (*text == 't' || *text == 'f') {
+            value = S_parse_json_bool(&text);
+        }
         if (!value) {
             CFCJson_destroy(node);
             return NULL;
@@ -186,6 +193,33 @@ S_parse_json_null(const char **json) {
     return node;
 }
 
+// Parse a JSON Boolean.
+static CFCJson*
+S_parse_json_bool(const char **json) {
+    static const char true_str[]  = "true";
+    static const char false_str[] = "false";
+
+    int val;
+
+    if (strncmp(*json, true_str, sizeof(true_str) - 1) == 0) {
+        val = 1;
+        *json += sizeof(true_str) - 1;
+    }
+    else if (strncmp(*json, false_str, sizeof(false_str) - 1) == 0) {
+        val = 0;
+        *json += sizeof(false_str) - 1;
+    }
+    else {
+        return NULL;
+    }
+
+    CFCJson *node = (CFCJson*)CALLOCATE(1, sizeof(CFCJson));
+    node->type     = CFCJSON_BOOL;
+    node->bool_val = val;
+
+    return node;
+}
+
 static void
 S_skip_whitespace(const char **json) {
     while (CFCUtil_isspace(json[0][0])) { *json = *json + 1; }
@@ -219,6 +253,14 @@ CFCJson_get_string(CFCJson *self) {
     return self->string;
 }
 
+int
+CFCJson_get_bool(CFCJson *self) {
+    if (self->type != CFCJSON_BOOL) {
+        CFCUtil_die("Not a JSON Boolean");
+    }
+    return self->bool_val;
+}
+
 size_t
 CFCJson_get_num_children(CFCJson *self) {
     if (self->type != CFCJSON_HASH) {

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f0abe457/compiler/src/CFCJson.h
----------------------------------------------------------------------
diff --git a/compiler/src/CFCJson.h b/compiler/src/CFCJson.h
index 8d75a90..97d7081 100644
--- a/compiler/src/CFCJson.h
+++ b/compiler/src/CFCJson.h
@@ -24,6 +24,7 @@ extern "C" {
 #define CFCJSON_STRING 1
 #define CFCJSON_HASH   2
 #define CFCJSON_NULL   3
+#define CFCJSON_BOOL   4
 
 typedef struct CFCJson CFCJson;
 
@@ -39,6 +40,9 @@ CFCJson_get_type(CFCJson *self);
 const char*
 CFCJson_get_string(CFCJson *self);
 
+int
+CFCJson_get_bool(CFCJson *self);
+
 size_t
 CFCJson_get_num_children(CFCJson *self);