Procházet zdrojové kódy

ncd: NCDConfigParser: Implement syntax sugar @foo = "__foo__".

Ambroz Bizjak před 11 roky
rodič
revize
1289e4aea1

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 437 - 404
generated/NCDConfigParser_parse.c


+ 3 - 2
generated/NCDConfigParser_parse.h

@@ -18,5 +18,6 @@
 #define COMMA                          18
 #define BRACKET_OPEN                   19
 #define BRACKET_CLOSE                  20
-#define PROCESS                        21
-#define TEMPLATE                       22
+#define AT_SIGN                        21
+#define PROCESS                        22
+#define TEMPLATE                       23

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 337 - 300
generated/NCDConfigParser_parse.out


+ 26 - 0
generated/NCDConfigParser_parse.y

@@ -695,6 +695,32 @@ doneU:
     free_token(A);
 }
 
+value(R) ::= AT_SIGN dotted_name(A). {
+    if (!A) {
+        goto failUA0;
+    }
+    
+    char *at_string = concat_strings(3, "__", A, "__");
+    if (!at_string) {
+        goto failUA0;
+    }
+    
+    int res = NCDValue_InitString(&R.v, at_string);
+    free(at_string);
+    if (!res) {
+        goto failUA0;
+    }
+    
+    R.have = 1;
+    goto doneUA0;
+    
+failUA0:
+    R.have = 0;
+    parser_out->out_of_memory = 1;
+doneUA0:
+    free(A);
+}
+
 value(R) ::= dotted_name(A). {
     if (!A) {
         goto failV0;

+ 4 - 0
ncd/NCDConfigParser.c

@@ -158,6 +158,10 @@ static int tokenizer_output (void *user, int token, char *value, size_t value_le
             Parse(state->parser, INCLUDE_GUARD, minor, &state->out);
         } break;
         
+        case NCD_TOKEN_AT: {
+            Parse(state->parser, AT_SIGN, minor, &state->out);
+        } break;
+        
         default:
             BLog(BLOG_ERROR, "line %zu, character %zu: invalid token", line, line_char);
             free(minor.str);

+ 26 - 0
ncd/NCDConfigParser_parse.y

@@ -695,6 +695,32 @@ doneU:
     free_token(A);
 }
 
+value(R) ::= AT_SIGN dotted_name(A). {
+    if (!A) {
+        goto failUA0;
+    }
+    
+    char *at_string = concat_strings(3, "__", A, "__");
+    if (!at_string) {
+        goto failUA0;
+    }
+    
+    int res = NCDValue_InitString(&R.v, at_string);
+    free(at_string);
+    if (!res) {
+        goto failUA0;
+    }
+    
+    R.have = 1;
+    goto doneUA0;
+    
+failUA0:
+    R.have = 0;
+    parser_out->out_of_memory = 1;
+doneUA0:
+    free(A);
+}
+
 value(R) ::= dotted_name(A). {
     if (!A) {
         goto failV0;

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů