/* Basic data types for Objective C.
- Copyright (C) 1998, 2002, 2004, 2005, 2006, 2009 Free Software Foundation, Inc.
+ Copyright (C) 1998-2020 Free Software Foundation, Inc.
Contributed by Ovidiu Predescu.
This file is part of GCC.
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
-#include "tconfig.h"
+#include "objc-private/common.h"
#include "objc/objc.h"
-#include "objc/encoding.h"
+#if OBJC_WITH_GC
+
+#include "tconfig.h"
#include <assert.h>
+#include <ctype.h> /* For isdigit. */
#include <string.h>
#include <stdlib.h>
+#include "objc/runtime.h"
+#include "objc-private/module-abi-8.h"
-#if OBJC_WITH_GC
-
-#include <gc.h>
+#include <gc/gc.h>
#include <limits.h>
/* gc_typed.h uses the following but doesn't declare them */
typedef GC_signed_word signed_word;
#define BITS_PER_WORD (CHAR_BIT * sizeof (word))
-#include <gc_typed.h>
+#include <gc/gc_typed.h>
/* The following functions set up in `mask` the corresponding pointers.
The offset is incremented with the size of the type. */
/* The number of bits in the mask is the size of an instance in bytes divided
by the size of a pointer. */
- bits_no = (ROUND (class_get_instance_size (class), sizeof (void *))
+ bits_no = (ROUND (class_getInstanceSize (class), sizeof (void *))
/ sizeof (void *));
size = ROUND (bits_no, BITS_PER_WORD) / BITS_PER_WORD;
mask = objc_atomic_malloc (size * sizeof (int));
/* The variable is gc visible so we make it gc_invisible. */
new_type = objc_malloc (strlen(ivar->ivar_type) + 2);
+
+ /* Copy the variable name. */
len = (type - ivar->ivar_type);
memcpy (new_type, ivar->ivar_type, len);
- new_type[len] = 0;
- strcat (new_type, "!");
- strcat (new_type, type);
+ /* Add '!'. */
+ new_type[len++] = _C_GCINVISIBLE;
+ /* Copy the original types. */
+ strcpy (new_type + len, type);
+
ivar->ivar_type = new_type;
}