/** * CTRParserString * * Generates a node to represent a string. */ ctr_tnode* ctr_cparse_string() { ctr_tnode* r; char* n; ctr_size vlen; if (ctr_mode_debug) printf("Parsing STRING. \n"); ctr_clex_tok(); r = CTR_PARSER_CREATE_NODE(); r->type = CTR_AST_NODE_LTRSTRING; n = ctr_clex_readstr(); vlen = ctr_clex_tok_value_length(); r->value = ctr_malloc(sizeof(char) * vlen, 0); memcpy(r->value, n, vlen); r->vlen = vlen; ctr_clex_tok(); /* eat trailing quote. */ return r; }
/** * CTRParserString * * Generates a node to represent a string. */ ctr_tnode * ctr_cparse_string () { ctr_tnode *r; char *n; ctr_size vlen; ctr_clex_tok (); r = ctr_cparse_create_node (CTR_AST_NODE); r->type = CTR_AST_NODE_LTRSTRING; n = ctr_clex_readstr (); vlen = ctr_clex_tok_value_length (); r->value = ctr_heap_allocate_tracked (sizeof (char) * vlen); memcpy (r->value, n, vlen); r->vlen = vlen; ctr_clex_tok (); /* eat trailing quote. */ return r; }
/** * Prints translatable strings in the program. */ char* ctr_translate_string(char* codePointer, ctr_dict* dictionary) { char* s; ctr_size l; char* e; char* p; p = codePointer; if (ctr_string_interpolation) { ctr_string_interpolation = 0; } s = ctr_clex_readstr(); l = ctr_clex_tok_value_length(s); e = ctr_clex_code_pointer(); if (ctr_string_interpolation) { e -= 3; } fwrite(p, e-p-l, 1, stdout); if (!ctr_translate_translate(s,l,dictionary,'s',NULL)) { fwrite(s,l,1,stdout); } if (!ctr_string_interpolation) { ctr_clex_tok(); } return e; }