Index: /libyaml/branches/stable/src/parser.c
===================================================================
--- /libyaml/branches/stable/src/parser.c	(revision 273)
+++ /libyaml/branches/stable/src/parser.c	(revision 346)
@@ -1281,8 +1281,8 @@
 
         else if (token->type == YAML_TAG_DIRECTIVE_TOKEN) {
-            yaml_tag_directive_t value = {
-                token->data.tag_directive.handle,
-                token->data.tag_directive.prefix
-            };
+            yaml_tag_directive_t value;
+            value.handle = token->data.tag_directive.handle;
+            value.prefix = token->data.tag_directive.prefix;
+
             if (!yaml_parser_append_tag_directive(parser, value, 0,
                         token->start_mark))
Index: /libyaml/branches/stable/src/yaml_private.h
===================================================================
--- /libyaml/branches/stable/src/yaml_private.h	(revision 243)
+++ /libyaml/branches/stable/src/yaml_private.h	(revision 346)
@@ -113,4 +113,9 @@
 
 #define STRING(string,length)   { (string), (string)+(length), (string) }
+
+#define STRING_ASSIGN(value,string,length)                                      \
+    ((value).start = (string),                                                  \
+     (value).end = (string)+(length),                                           \
+     (value).pointer = (string))
 
 #define STRING_INIT(context,string,size)                                        \
Index: /libyaml/branches/stable/src/loader.c
===================================================================
--- /libyaml/branches/stable/src/loader.c	(revision 243)
+++ /libyaml/branches/stable/src/loader.c	(revision 346)
@@ -226,9 +226,11 @@
         int index, yaml_char_t *anchor)
 {
-    yaml_alias_data_t data = { anchor, index, { 0, 0, 0 } };
+    yaml_alias_data_t data;
     yaml_alias_data_t *alias_data;
 
     if (!anchor) return 1;
 
+    data.anchor = anchor;
+    data.index = index;
     data.mark = parser->document->nodes.start[index-1].start_mark;
 
Index: /libyaml/branches/stable/src/api.c
===================================================================
--- /libyaml/branches/stable/src/api.c	(revision 243)
+++ /libyaml/branches/stable/src/api.c	(revision 346)
@@ -1366,5 +1366,6 @@
         yaml_error_type_t error;
     } context;
-    yaml_node_pair_t pair = { key, value };
+
+    yaml_node_pair_t pair;
 
     assert(document);       /* Non-NULL document is required. */
@@ -1379,4 +1380,7 @@
                             /* Valid value id is required. */
 
+    pair.key = key;
+    pair.value = value;
+
     if (!PUSH(&context,
                 document->nodes.start[mapping-1].data.mapping.pairs, pair))
Index: /libyaml/branches/stable/src/emitter.c
===================================================================
--- /libyaml/branches/stable/src/emitter.c	(revision 315)
+++ /libyaml/branches/stable/src/emitter.c	(revision 346)
@@ -1350,8 +1350,13 @@
         yaml_tag_directive_t tag_directive)
 {
-    yaml_string_t handle = STRING(tag_directive.handle,
-            strlen((char *)tag_directive.handle));
-    yaml_string_t prefix = STRING(tag_directive.prefix,
-            strlen((char *)tag_directive.prefix));
+    yaml_string_t handle;
+    yaml_string_t prefix;
+    size_t handle_length;
+    size_t prefix_length;
+
+    handle_length = strlen((char *)tag_directive.handle);
+    prefix_length = strlen((char *)tag_directive.prefix);
+    STRING_ASSIGN(handle, tag_directive.handle, handle_length);
+    STRING_ASSIGN(prefix, tag_directive.prefix, prefix_length);
 
     if (handle.start == handle.end) {
@@ -1396,5 +1401,9 @@
         yaml_char_t *anchor, int alias)
 {
-    yaml_string_t string = STRING(anchor, strlen((char *)anchor));
+    size_t anchor_length;
+    yaml_string_t string;
+    
+    anchor_length = strlen((char *)anchor);
+    STRING_ASSIGN(string, anchor, anchor_length);
 
     if (string.start == string.end) {
@@ -1428,6 +1437,10 @@
         yaml_char_t *tag)
 {
-    yaml_string_t string = STRING(tag, strlen((char *)tag));
+    size_t tag_length;
+    yaml_string_t string;
     yaml_tag_directive_t *tag_directive;
+
+    tag_length = strlen((char *)tag);
+    STRING_ASSIGN(string, tag, tag_length);
 
     if (string.start == string.end) {
@@ -1467,5 +1480,5 @@
         yaml_char_t *value, size_t length)
 {
-    yaml_string_t string = STRING(value, length);
+    yaml_string_t string;
 
     int block_indicators = 0;
@@ -1485,4 +1498,6 @@
     int previous_space = 0;
     int previous_break = 0;
+
+    STRING_ASSIGN(string, value, length);
 
     emitter->scalar_data.value = value;
@@ -1773,5 +1788,9 @@
         int is_whitespace, int is_indention)
 {
-    yaml_string_t string = STRING((yaml_char_t *)indicator, strlen(indicator));
+    size_t indicator_length;
+    yaml_string_t string;
+
+    indicator_length = strlen(indicator);
+    STRING_ASSIGN(string, (yaml_char_t *)indicator, indicator_length);
 
     if (need_whitespace && !emitter->whitespace) {
@@ -1794,5 +1813,6 @@
         yaml_char_t *value, size_t length)
 {
-    yaml_string_t string = STRING(value, length);
+    yaml_string_t string;
+    STRING_ASSIGN(string, value, length);
 
     while (string.pointer != string.end) {
@@ -1810,5 +1830,6 @@
         yaml_char_t *value, size_t length)
 {
-    yaml_string_t string = STRING(value, length);
+    yaml_string_t string;
+    STRING_ASSIGN(string, value, length);
 
     if (!emitter->whitespace) {
@@ -1831,5 +1852,6 @@
         int need_whitespace)
 {
-    yaml_string_t string = STRING(value, length);
+    yaml_string_t string;
+    STRING_ASSIGN(string, value, length);
 
     if (need_whitespace && !emitter->whitespace) {
@@ -1877,7 +1899,9 @@
         yaml_char_t *value, size_t length, int allow_breaks)
 {
-    yaml_string_t string = STRING(value, length);
+    yaml_string_t string;
     int spaces = 0;
     int breaks = 0;
+
+    STRING_ASSIGN(string, value, length);
 
     if (!emitter->whitespace) {
@@ -1935,7 +1959,9 @@
         yaml_char_t *value, size_t length, int allow_breaks)
 {
-    yaml_string_t string = STRING(value, length);
+    yaml_string_t string;
     int spaces = 0;
     int breaks = 0;
+
+    STRING_ASSIGN(string, value, length);
 
     if (!yaml_emitter_write_indicator(emitter, "'", 1, 0, 0))
@@ -1996,6 +2022,8 @@
         yaml_char_t *value, size_t length, int allow_breaks)
 {
-    yaml_string_t string = STRING(value, length);
+    yaml_string_t string;
     int spaces = 0;
+
+    STRING_ASSIGN(string, value, length);
 
     if (!yaml_emitter_write_indicator(emitter, "\"", 1, 0, 0))
@@ -2208,6 +2236,8 @@
         yaml_char_t *value, size_t length)
 {
-    yaml_string_t string = STRING(value, length);
+    yaml_string_t string;
     int breaks = 1;
+
+    STRING_ASSIGN(string, value, length);
 
     if (!yaml_emitter_write_indicator(emitter, "|", 1, 0, 0))
@@ -2245,7 +2275,9 @@
         yaml_char_t *value, size_t length)
 {
-    yaml_string_t string = STRING(value, length);
+    yaml_string_t string;
     int breaks = 1;
     int leading_spaces = 1;
+
+    STRING_ASSIGN(string, value, length);
 
     if (!yaml_emitter_write_indicator(emitter, ">", 1, 0, 0))
Index: /libyaml/branches/stable/src/scanner.c
===================================================================
--- /libyaml/branches/stable/src/scanner.c	(revision 273)
+++ /libyaml/branches/stable/src/scanner.c	(revision 346)
@@ -1119,7 +1119,9 @@
     if (parser->simple_key_allowed)
     {
-        yaml_simple_key_t simple_key = { 1, required,
-            parser->tokens_parsed + parser->tokens.tail - parser->tokens.head,
-            { 0, 0, 0 } };
+        yaml_simple_key_t simple_key;
+        simple_key.possible = 1;
+        simple_key.required = required;
+        simple_key.token_number = 
+            parser->tokens_parsed + parser->tokens.tail - parser->tokens.head;
         simple_key.mark = parser->mark;
 
