Merge pull request #1659 from alexanderkyte/stringbuilder-referencesource
[mono.git] / mono / metadata / object-internals.h
index e3caae5927a9796b6a9785bb598dfa8e181dfe86..6041aa1ae648969e0cf4377647a4c3286b5c9a04 100644 (file)
@@ -87,8 +87,8 @@
                return retval;                                                                            \
        };                              }G_STMT_END
 
-/* 16 == default capacity */
-#define mono_stringbuilder_capacity(sb) ((sb)->str ? ((sb)->str->length) : 16)
+#define mono_string_builder_capacity(sb) sb->chunkOffset + sb->chunkChars->max_length
+#define mono_string_builder_string_length(sb) sb->chunkOffset + sb->chunkLength
 
 /* 
  * Macros which cache the results of lookups locally.
@@ -210,13 +210,16 @@ struct _MonoAppDomain {
        MonoDomain *data;
 };
 
-typedef struct {
+typedef struct _MonoStringBuilder MonoStringBuilder;
+
+struct _MonoStringBuilder {
        MonoObject object;
-       gint32 length;
-       MonoString *str;
-       MonoString *cached_str;
-       gint32 max_capacity;
-} MonoStringBuilder;
+       MonoArray  *chunkChars;
+       MonoStringBuilder* chunkPrevious;      // Link to the block logically before this block
+       int chunkLength;                  // The index in ChunkChars that represent the end of the block
+       int chunkOffset;                  // The logial offset (sum of all characters in previous blocks)
+       int maxCapacity;
+};
 
 typedef struct {
        MonoType *type;
@@ -360,6 +363,7 @@ typedef struct {
        gint32 il_offset;
        gint32 native_offset;
        gint64 method_address;
+       gint32 method_index;
        MonoReflectionMethod *method;
        MonoString *filename;
        gint32 line;
@@ -386,7 +390,7 @@ struct _MonoInternalThread {
        HANDLE      start_notify;
        gpointer stack_ptr;
        gpointer *static_data;
-       gpointer jit_data;
+       gpointer dead_field_remove_me; /* This used to be jit_data, but that was moved to MonoThreadInfo. */
        void *thread_info; /*This is MonoThreadInfo*, but to simplify dependencies, let's make it a void* here. */
        MonoAppContext *current_appcontext;
        MonoException *pending_exception;