aboutsummaryrefslogtreecommitdiff
path: root/ld/cdtest-foo.cc
blob: 615e33cea78fb72234b146ebfac08e8220d4e157 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// Class Foo
#pragma implementation


// We don't use header files, since we only want to see, whether the
// compiler is installed properly.
//
#if (__GNUG__ == 2)
typedef __SIZE_TYPE__ size_t;
#else
typedef unsigned int size_t;
#endif

extern "C" {
    char *strncpy (char* dest, const char* dest, size_t len);
    int printf (const char*, ...);
};

#include "cdtest-foo.h"

int Foo::foos = 0;

void Foo::init_foo ()
{
    printf ("BROKENLY calling Foo::init_foo from __init_start; size_of(Foo) = %d\n", sizeof(Foo));
    foos = FOOLISH_NUMBER;
}


Foo::Foo ()
{
    i = ++foos;
    strncpy (message, "default-foo", len);
#ifdef WITH_ADDR
    printf ("Constructing Foo(%d) \"default-foo\" at %08x\n", i, this);
#else
    printf ("Constructing Foo(%d) \"default-foo\"\n", i);
#endif
}

Foo::Foo (char* msg)
{
    i = ++foos;
    strncpy( message, msg, len);
#ifdef WITH_ADDR
    printf ( "Constructing Foo(%d) \"%s\" at %08x\n", i, message, this);
#else
    printf ( "Constructing Foo(%d) \"%s\"\n", i, message);
#endif
}


Foo::Foo (const Foo& foo)
{
    i = ++foos;
#ifdef WITH_ADDR
    printf ("Initializing Foo(%d) \"%s\" at %08x with Foo(%d) %08x\n", 
	    i, foo.message, this, foo.i, &foo);
#else
   printf ("Initializing Foo(%d) \"%s\" with Foo(%d)\n",i, foo.message, foo.i);
#endif
    for ( int k = 0; k < FOO_MSG_LEN; k++) message[k] = foo.message[k];
}


Foo& Foo::operator= (const Foo& foo)
{
#ifdef WITH_ADDR
    printf ("Copying Foo(%d) \"%s\" at %08x to Foo(%d) %08x\n", 
	    foo.i, foo.message, &foo, i, this);
#else
   printf ("Copying Foo(%d) \"%s\" to Foo(%d)\n", foo.i, foo.message, i);
#endif
    for ( int k = 0; k < FOO_MSG_LEN; k++) message[k] = foo.message[k];
    return *this;
}


Foo::~Foo ()
{
    foos--;
#ifdef WITH_ADDR
    printf ("Destructing Foo(%d) \"%s\" at %08x (remaining foos: %d)\n",
	    i, message, this, foos);
#else
    printf ("Destructing Foo(%d) \"%s\" (remaining foos: %d)\n",
	    i, message, foos);
#endif
}