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.
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;
gint32 il_offset;
gint32 native_offset;
gint64 method_address;
+ gint32 method_index;
MonoReflectionMethod *method;
MonoString *filename;
gint32 line;
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;
char *
mono_exception_get_managed_backtrace (MonoException *exc);
+void
+mono_copy_value (MonoType *type, void *dest, void *value, int deref_pointer);
+
#endif /* __MONO_OBJECT_INTERNALS_H__ */