Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Zwinkau
libfirm
Commits
2de99b2c
Commit
2de99b2c
authored
Jan 04, 2005
by
Michael Beck
Browse files
removed <stdbool.h> include
[r4783]
parent
857724c7
Changes
2
Hide whitespace changes
Inline
Side-by-side
ir/tr/type.c
View file @
2de99b2c
...
...
@@ -434,28 +434,29 @@ int (is_type)(const void *thing) {
return
__is_type
(
thing
);
}
bool
equal_type
(
type
*
typ1
,
type
*
typ2
)
{
/* Checks whether two types are structural equal.*/
int
equal_type
(
type
*
typ1
,
type
*
typ2
)
{
entity
**
m
;
type
**
t
;
int
i
,
j
;
if
(
typ1
==
typ2
)
return
true
;
if
(
typ1
==
typ2
)
return
1
;
if
((
get_type_tpop_code
(
typ1
)
!=
get_type_tpop_code
(
typ2
))
||
(
get_type_ident
(
typ1
)
!=
get_type_ident
(
typ2
))
||
(
get_type_mode
(
typ1
)
!=
get_type_mode
(
typ2
))
||
(
get_type_state
(
typ1
)
!=
get_type_state
(
typ2
)))
return
false
;
return
0
;
if
((
get_type_state
(
typ1
)
==
layout_fixed
)
&&
(
get_type_size_bits
(
typ1
)
!=
get_type_size_bits
(
typ2
)))
return
false
;
return
0
;
switch
(
get_type_tpop_code
(
typ1
))
{
case
tpo_class
:
{
if
(
get_class_n_members
(
typ1
)
!=
get_class_n_members
(
typ2
))
return
false
;
if
(
get_class_n_subtypes
(
typ1
)
!=
get_class_n_subtypes
(
typ2
))
return
false
;
if
(
get_class_n_supertypes
(
typ1
)
!=
get_class_n_supertypes
(
typ2
))
return
false
;
if
(
get_class_peculiarity
(
typ1
)
!=
get_class_peculiarity
(
typ2
))
return
false
;
if
(
get_class_n_members
(
typ1
)
!=
get_class_n_members
(
typ2
))
return
0
;
if
(
get_class_n_subtypes
(
typ1
)
!=
get_class_n_subtypes
(
typ2
))
return
0
;
if
(
get_class_n_supertypes
(
typ1
)
!=
get_class_n_supertypes
(
typ2
))
return
0
;
if
(
get_class_peculiarity
(
typ1
)
!=
get_class_peculiarity
(
typ2
))
return
0
;
/** Compare the members **/
m
=
alloca
(
sizeof
(
entity
*
)
*
get_class_n_members
(
typ1
));
memset
(
m
,
0
,
sizeof
(
entity
*
)
*
get_class_n_members
(
typ1
));
...
...
@@ -471,7 +472,7 @@ bool equal_type(type *typ1, type *typ2) {
for
(
i
=
0
;
i
<
get_class_n_members
(
typ1
);
i
++
)
{
if
(
!
m
[
i
]
||
/* Found no counterpart */
!
equal_entity
(
get_class_member
(
typ1
,
i
),
m
[
i
]))
return
false
;
return
0
;
}
/** Compare the supertypes **/
t
=
alloca
(
sizeof
(
entity
*
)
*
get_class_n_supertypes
(
typ1
));
...
...
@@ -488,11 +489,11 @@ bool equal_type(type *typ1, type *typ2) {
for
(
i
=
0
;
i
<
get_class_n_supertypes
(
typ1
);
i
++
)
{
if
(
!
t
[
i
]
||
/* Found no counterpart */
get_class_supertype
(
typ1
,
i
)
!=
t
[
i
])
return
false
;
return
0
;
}
}
break
;
case
tpo_struct
:
{
if
(
get_struct_n_members
(
typ1
)
!=
get_struct_n_members
(
typ2
))
return
false
;
if
(
get_struct_n_members
(
typ1
)
!=
get_struct_n_members
(
typ2
))
return
0
;
m
=
alloca
(
sizeof
(
entity
*
)
*
get_struct_n_members
(
typ1
));
memset
(
m
,
0
,
sizeof
(
entity
*
)
*
get_struct_n_members
(
typ1
));
/* First sort the members of lt */
...
...
@@ -507,14 +508,14 @@ bool equal_type(type *typ1, type *typ2) {
for
(
i
=
0
;
i
<
get_struct_n_members
(
typ1
);
i
++
)
{
if
(
!
m
[
i
]
||
/* Found no counterpart */
!
equal_entity
(
get_struct_member
(
typ1
,
i
),
m
[
i
]))
return
false
;
return
0
;
}
}
break
;
case
tpo_method
:
{
int
n_param1
,
n_param2
;
if
(
get_method_variadicity
(
typ1
)
!=
get_method_variadicity
(
typ2
))
return
false
;
if
(
get_method_n_ress
(
typ1
)
!=
get_method_n_ress
(
typ2
))
return
false
;
if
(
get_method_variadicity
(
typ1
)
!=
get_method_variadicity
(
typ2
))
return
0
;
if
(
get_method_n_ress
(
typ1
)
!=
get_method_n_ress
(
typ2
))
return
0
;
if
(
get_method_variadicity
(
typ1
)
==
variadicity_non_variadic
)
{
n_param1
=
get_method_n_params
(
typ1
);
...
...
@@ -525,19 +526,19 @@ bool equal_type(type *typ1, type *typ2) {
n_param2
=
get_method_first_variadic_param_index
(
typ2
);
}
if
(
n_param1
!=
n_param2
)
return
false
;
if
(
n_param1
!=
n_param2
)
return
0
;
for
(
i
=
0
;
i
<
n_param1
;
i
++
)
{
if
(
!
equal_type
(
get_method_param_type
(
typ1
,
i
),
get_method_param_type
(
typ2
,
i
)))
return
false
;
return
0
;
}
for
(
i
=
0
;
i
<
get_method_n_ress
(
typ1
);
i
++
)
{
if
(
!
equal_type
(
get_method_res_type
(
typ1
,
i
),
get_method_res_type
(
typ2
,
i
)))
return
false
;
return
0
;
}
}
break
;
case
tpo_union
:
{
if
(
get_union_n_members
(
typ1
)
!=
get_union_n_members
(
typ2
))
return
false
;
if
(
get_union_n_members
(
typ1
)
!=
get_union_n_members
(
typ2
))
return
0
;
m
=
alloca
(
sizeof
(
entity
*
)
*
get_union_n_members
(
typ1
));
memset
(
m
,
0
,
sizeof
(
entity
*
)
*
get_union_n_members
(
typ1
));
/* First sort the members of lt */
...
...
@@ -552,18 +553,18 @@ bool equal_type(type *typ1, type *typ2) {
for
(
i
=
0
;
i
<
get_union_n_members
(
typ1
);
i
++
)
{
if
(
!
m
[
i
]
||
/* Found no counterpart */
!
equal_entity
(
get_union_member
(
typ1
,
i
),
m
[
i
]))
return
false
;
return
0
;
}
}
break
;
case
tpo_array
:
{
if
(
get_array_n_dimensions
(
typ1
)
!=
get_array_n_dimensions
(
typ2
))
return
false
;
return
0
;
if
(
!
equal_type
(
get_array_element_type
(
typ1
),
get_array_element_type
(
typ2
)))
return
false
;
return
0
;
for
(
i
=
0
;
i
<
get_array_n_dimensions
(
typ1
);
i
++
)
{
if
(
get_array_lower_bound
(
typ1
,
i
)
!=
get_array_lower_bound
(
typ2
,
i
)
||
get_array_upper_bound
(
typ1
,
i
)
!=
get_array_upper_bound
(
typ2
,
i
))
return
false
;
return
0
;
if
(
get_array_order
(
typ1
,
i
)
!=
get_array_order
(
typ2
,
i
))
assert
(
0
&&
"type compare with different dimension orders not implemented"
);
}
...
...
@@ -573,30 +574,31 @@ bool equal_type(type *typ1, type *typ2) {
}
break
;
case
tpo_pointer
:
{
if
(
get_pointer_points_to_type
(
typ1
)
!=
get_pointer_points_to_type
(
typ2
))
return
false
;
return
0
;
}
break
;
case
tpo_primitive
:
{
}
break
;
default:
break
;
}
return
true
;
return
1
;
}
bool
smaller_type
(
type
*
st
,
type
*
lt
)
{
/* Checks whether two types are structural comparable. */
int
smaller_type
(
type
*
st
,
type
*
lt
)
{
entity
**
m
;
int
i
,
j
;
if
(
st
==
lt
)
return
true
;
if
(
st
==
lt
)
return
1
;
if
(
get_type_tpop_code
(
st
)
!=
get_type_tpop_code
(
lt
))
return
false
;
return
0
;
switch
(
get_type_tpop_code
(
st
))
{
case
tpo_class
:
{
return
is_subclass_of
(
st
,
lt
);
}
break
;
case
tpo_struct
:
{
if
(
get_struct_n_members
(
st
)
!=
get_struct_n_members
(
lt
))
return
false
;
if
(
get_struct_n_members
(
st
)
!=
get_struct_n_members
(
lt
))
return
0
;
m
=
alloca
(
sizeof
(
entity
*
)
*
get_struct_n_members
(
st
));
memset
(
m
,
0
,
sizeof
(
entity
*
)
*
get_struct_n_members
(
st
));
/* First sort the members of lt */
...
...
@@ -612,25 +614,25 @@ bool smaller_type (type *st, type *lt) {
if
(
!
m
[
i
]
||
/* Found no counterpart */
!
smaller_type
(
get_entity_type
(
get_struct_member
(
st
,
i
)),
get_entity_type
(
m
[
i
])))
return
false
;
return
0
;
}
}
break
;
case
tpo_method
:
{
/** FIXME: is this still
true
? */
if
(
get_method_variadicity
(
st
)
!=
get_method_variadicity
(
lt
))
return
false
;
if
(
get_method_n_params
(
st
)
!=
get_method_n_params
(
lt
))
return
false
;
if
(
get_method_n_ress
(
st
)
!=
get_method_n_ress
(
lt
))
return
false
;
/** FIXME: is this still
1
? */
if
(
get_method_variadicity
(
st
)
!=
get_method_variadicity
(
lt
))
return
0
;
if
(
get_method_n_params
(
st
)
!=
get_method_n_params
(
lt
))
return
0
;
if
(
get_method_n_ress
(
st
)
!=
get_method_n_ress
(
lt
))
return
0
;
for
(
i
=
0
;
i
<
get_method_n_params
(
st
);
i
++
)
{
if
(
!
smaller_type
(
get_method_param_type
(
st
,
i
),
get_method_param_type
(
lt
,
i
)))
return
false
;
return
0
;
}
for
(
i
=
0
;
i
<
get_method_n_ress
(
st
);
i
++
)
{
if
(
!
smaller_type
(
get_method_res_type
(
st
,
i
),
get_method_res_type
(
lt
,
i
)))
return
false
;
return
0
;
}
}
break
;
case
tpo_union
:
{
if
(
get_union_n_members
(
st
)
!=
get_union_n_members
(
lt
))
return
false
;
if
(
get_union_n_members
(
st
)
!=
get_union_n_members
(
lt
))
return
0
;
m
=
alloca
(
sizeof
(
entity
*
)
*
get_union_n_members
(
st
));
memset
(
m
,
0
,
sizeof
(
entity
*
)
*
get_union_n_members
(
st
));
/* First sort the members of lt */
...
...
@@ -646,13 +648,13 @@ bool smaller_type (type *st, type *lt) {
if
(
!
m
[
i
]
||
/* Found no counterpart */
!
smaller_type
(
get_entity_type
(
get_union_member
(
st
,
i
)),
get_entity_type
(
m
[
i
])))
return
false
;
return
0
;
}
}
break
;
case
tpo_array
:
{
type
*
set
,
*
let
;
/* small/large elt. type */
if
(
get_array_n_dimensions
(
st
)
!=
get_array_n_dimensions
(
lt
))
return
false
;
return
0
;
set
=
get_array_element_type
(
st
);
let
=
get_array_element_type
(
lt
);
if
(
set
!=
let
)
{
...
...
@@ -662,18 +664,18 @@ bool smaller_type (type *st, type *lt) {
be fixed. */
if
((
get_type_state
(
set
)
!=
layout_fixed
)
||
(
get_type_state
(
let
)
!=
layout_fixed
))
return
false
;
return
0
;
if
(
!
smaller_type
(
set
,
let
)
||
get_type_size_bits
(
set
)
!=
get_type_size_bits
(
let
))
return
false
;
return
0
;
}
for
(
i
=
0
;
i
<
get_array_n_dimensions
(
st
);
i
++
)
{
if
(
get_array_lower_bound
(
lt
,
i
))
if
(
get_array_lower_bound
(
st
,
i
)
!=
get_array_lower_bound
(
lt
,
i
))
return
false
;
return
0
;
if
(
get_array_upper_bound
(
lt
,
i
))
if
(
get_array_upper_bound
(
st
,
i
)
!=
get_array_upper_bound
(
lt
,
i
))
return
false
;
return
0
;
}
}
break
;
case
tpo_enumeration
:
{
...
...
@@ -682,15 +684,15 @@ bool smaller_type (type *st, type *lt) {
case
tpo_pointer
:
{
if
(
!
smaller_type
(
get_pointer_points_to_type
(
st
),
get_pointer_points_to_type
(
lt
)))
return
false
;
return
0
;
}
break
;
case
tpo_primitive
:
{
if
(
!
smaller_mode
(
get_type_mode
(
st
),
get_type_mode
(
lt
)))
return
false
;
return
0
;
}
break
;
default:
break
;
}
return
true
;
return
1
;
}
/*-----------------------------------------------------------------*/
...
...
@@ -912,18 +914,19 @@ int (is_class_type)(const type *clss) {
return
__is_class_type
(
clss
);
}
bool
is_subclass_of
(
type
*
low
,
type
*
high
)
{
/* Returns true if low is subclass of high. */
int
is_subclass_of
(
type
*
low
,
type
*
high
)
{
int
i
;
assert
(
is_class_type
(
low
)
&&
is_class_type
(
high
));
if
(
low
==
high
)
return
true
;
if
(
low
==
high
)
return
1
;
/* depth first search from high downwards. */
for
(
i
=
0
;
i
<
get_class_n_subtypes
(
high
);
i
++
)
{
if
(
low
==
get_class_subtype
(
high
,
i
))
return
true
;
return
1
;
if
(
is_subclass_of
(
low
,
get_class_subtype
(
high
,
i
)))
return
true
;
return
1
;
}
return
false
;
return
0
;
}
/*----------------------------------------------------------------**/
...
...
ir/tr/type.h
View file @
2de99b2c
...
...
@@ -36,8 +36,6 @@
# ifndef _TYPE_H_
# define _TYPE_H_
# include <stdbool.h>
# include "tpop.h"
# include "firm_common.h"
# include "ident.h"
...
...
@@ -300,7 +298,7 @@ int is_type (const void *thing);
* This is to avoid endless recursions; with pointer types circlic
* type graphs are possible.)
*/
bool
equal_type
(
type
*
tpy1
,
type
*
typ2
);
int
equal_type
(
type
*
tpy1
,
type
*
typ2
);
/**
* Checks whether two types are structural comparable.
...
...
@@ -337,7 +335,7 @@ bool equal_type(type *tpy1, type *typ2);
* @return smaller than the points_to type of lt.
*
*/
bool
smaller_type
(
type
*
st
,
type
*
lt
);
int
smaller_type
(
type
*
st
,
type
*
lt
);
/**
* @page class_type Representation of a class type
...
...
@@ -484,7 +482,7 @@ int get_class_dfn (const type *clss);
int
is_class_type
(
const
type
*
clss
);
/** Returns true if low is subclass of high. */
bool
is_subclass_of
(
type
*
low
,
type
*
high
);
int
is_subclass_of
(
type
*
low
,
type
*
high
);
/**
* @page struct_type Representation of a struct type
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment