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
8d5c9fab
Commit
8d5c9fab
authored
Sep 12, 2006
by
Michael Beck
Browse files
get_/set_method_param_ident() added, needed for debug support
[r8218]
parent
8fb3ce50
Changes
3
Hide whitespace changes
Inline
Side-by-side
ir/tr/type.c
View file @
8d5c9fab
...
...
@@ -1157,10 +1157,15 @@ build_value_type(ident *name, int len, tp_ent_pair *tps) {
/* Remove type from type list. Must be treated differently than other types. */
remove_irp_type
(
res
);
for
(
i
=
0
;
i
<
len
;
i
++
)
{
ident
*
id
=
tps
[
i
].
param_name
;
/* use res as default if corresponding type is not yet set. */
ir_type
*
elt_type
=
tps
[
i
].
tp
?
tps
[
i
].
tp
:
res
;
tps
[
i
].
ent
=
new_entity
(
res
,
mangle_u
(
name
,
get_type_ident
(
elt_type
)),
elt_type
);
/* use the parameter name if specified */
if
(
!
id
)
id
=
mangle_u
(
name
,
get_type_ident
(
elt_type
));
tps
[
i
].
ent
=
new_entity
(
res
,
id
,
elt_type
);
set_entity_allocation
(
tps
[
i
].
ent
,
allocation_parameter
);
}
return
res
;
...
...
@@ -1176,7 +1181,7 @@ ir_type *new_d_type_method(ident *name, int n_param, int n_res, dbg_info *db) {
res
->
flags
|=
tf_layout_fixed
;
res
->
size
=
get_mode_size_bits
(
mode_P_code
);
res
->
attr
.
ma
.
n_params
=
n_param
;
res
->
attr
.
ma
.
param
_type
=
xcalloc
(
n_param
,
sizeof
(
res
->
attr
.
ma
.
param
_type
[
0
]));
res
->
attr
.
ma
.
param
s
=
xcalloc
(
n_param
,
sizeof
(
res
->
attr
.
ma
.
param
s
[
0
]));
res
->
attr
.
ma
.
value_params
=
NULL
;
res
->
attr
.
ma
.
n_res
=
n_res
;
res
->
attr
.
ma
.
res_type
=
xcalloc
(
n_res
,
sizeof
(
res
->
attr
.
ma
.
res_type
[
0
]));
...
...
@@ -1200,7 +1205,7 @@ void free_method_entities(ir_type *method) {
/* Attention: also frees entities in value parameter subtypes! */
void
free_method_attrs
(
ir_type
*
method
)
{
assert
(
method
&&
(
method
->
type_op
==
type_method
));
free
(
method
->
attr
.
ma
.
param
_type
);
free
(
method
->
attr
.
ma
.
param
s
);
free
(
method
->
attr
.
ma
.
res_type
);
if
(
method
->
attr
.
ma
.
value_params
)
{
free_type_entities
(
method
->
attr
.
ma
.
value_params
);
...
...
@@ -1217,19 +1222,20 @@ int (get_method_n_params)(const ir_type *method) {
return
_get_method_n_params
(
method
);
}
/* Returns the type of the parameter at position pos of a method. */
ir_type
*
get_method_param_type
(
ir_type
*
method
,
int
pos
)
{
ir_type
*
res
;
assert
(
method
&&
(
method
->
type_op
==
type_method
));
assert
(
pos
>=
0
&&
pos
<
get_method_n_params
(
method
));
res
=
method
->
attr
.
ma
.
param
_type
[
pos
].
tp
;
res
=
method
->
attr
.
ma
.
param
s
[
pos
].
tp
;
assert
(
res
!=
NULL
&&
"empty method param type"
);
return
method
->
attr
.
ma
.
param
_type
[
pos
].
tp
=
skip_tid
(
res
);
return
method
->
attr
.
ma
.
param
s
[
pos
].
tp
=
skip_tid
(
res
);
}
void
set_method_param_type
(
ir_type
*
method
,
int
pos
,
ir_type
*
tp
)
{
assert
(
method
&&
(
method
->
type_op
==
type_method
));
assert
(
pos
>=
0
&&
pos
<
get_method_n_params
(
method
));
method
->
attr
.
ma
.
param
_type
[
pos
].
tp
=
tp
;
method
->
attr
.
ma
.
param
s
[
pos
].
tp
=
tp
;
/* If information constructed set pass-by-value representation. */
if
(
method
->
attr
.
ma
.
value_params
)
{
assert
(
get_method_n_params
(
method
)
==
get_struct_n_members
(
method
->
attr
.
ma
.
value_params
));
...
...
@@ -1237,6 +1243,28 @@ void set_method_param_type(ir_type *method, int pos, ir_type *tp) {
}
}
/* Returns an ident representing the parameters name. Returns NULL if not set.
For debug support only. */
ident
*
get_method_param_ident
(
ir_type
*
method
,
int
pos
)
{
assert
(
method
&&
(
method
->
type_op
==
type_method
));
assert
(
pos
>=
0
&&
pos
<
get_method_n_params
(
method
));
return
method
->
attr
.
ma
.
params
[
pos
].
param_name
;
}
/* Returns a string representing the parameters name. Returns NULL if not set.
For debug support only. */
const
char
*
get_method_param_name
(
ir_type
*
method
,
int
pos
)
{
ident
*
id
=
get_method_param_ident
(
method
,
pos
);
return
id
?
get_id_str
(
id
)
:
NULL
;
}
/* Sets an ident representing the parameters name. For debug support only. */
void
set_method_param_ident
(
ir_type
*
method
,
int
pos
,
ident
*
id
)
{
assert
(
method
&&
(
method
->
type_op
==
type_method
));
assert
(
pos
>=
0
&&
pos
<
get_method_n_params
(
method
));
method
->
attr
.
ma
.
params
[
pos
].
param_name
=
id
;
}
/* Returns an entity that represents the copied value argument. Only necessary
for compounds passed by value. */
entity
*
get_method_value_param_ent
(
ir_type
*
method
,
int
pos
)
{
...
...
@@ -1247,15 +1275,15 @@ entity *get_method_value_param_ent(ir_type *method, int pos) {
/* parameter value type not created yet, build */
method
->
attr
.
ma
.
value_params
=
build_value_type
(
mangle_u
(
get_type_ident
(
method
),
value_params_suffix
),
get_method_n_params
(
method
),
method
->
attr
.
ma
.
param
_type
);
get_method_n_params
(
method
),
method
->
attr
.
ma
.
param
s
);
}
/*
* build_value_type() sets the method->attr.ma.value_params type as default if
* no type is set!
*/
assert
((
get_entity_type
(
method
->
attr
.
ma
.
param
_type
[
pos
].
ent
)
!=
method
->
attr
.
ma
.
value_params
)
assert
((
get_entity_type
(
method
->
attr
.
ma
.
param
s
[
pos
].
ent
)
!=
method
->
attr
.
ma
.
value_params
)
&&
"param type not yet set"
);
return
method
->
attr
.
ma
.
param
_type
[
pos
].
ent
;
return
method
->
attr
.
ma
.
param
s
[
pos
].
ent
;
}
/*
...
...
ir/tr/type.h
View file @
8d5c9fab
...
...
@@ -771,6 +771,14 @@ entity *get_method_value_param_ent(ir_type *method, int pos);
* was allocated, else NULL.
*/
ir_type
*
get_method_value_param_type
(
const
ir_type
*
method
);
/** Returns an ident representing the parameters name. Returns NULL if not set.
For debug support only. */
ident
*
get_method_param_ident
(
ir_type
*
method
,
int
pos
);
/** Returns a string representing the parameters name. Returns NULL if not set.
For debug support only. */
const
char
*
get_method_param_name
(
ir_type
*
method
,
int
pos
);
/** Sets an ident representing the parameters name. For debug support only. */
void
set_method_param_ident
(
ir_type
*
method
,
int
pos
,
ident
*
id
);
/** Returns the number of results of a method type. */
int
get_method_n_ress
(
const
ir_type
*
method
);
...
...
ir/tr/type_t.h
View file @
8d5c9fab
...
...
@@ -57,12 +57,13 @@ typedef struct {
typedef
struct
{
ir_type
*
tp
;
/**< A type. */
entity
*
ent
;
/**< An entity. */
ident
*
param_name
;
/**< For debugging purposes: the name of the parameter */
}
tp_ent_pair
;
/** Method type attributes. */
typedef
struct
{
int
n_params
;
/**< Number of parameters. */
tp_ent_pair
*
param
_type
;
/**< Array of parameter type/value entities pairs. */
tp_ent_pair
*
param
s
;
/**< Array of parameter type/value entities pairs. */
ir_type
*
value_params
;
/**< A type whose entities represent copied value arguments. */
int
n_res
;
/**< Number of results. */
tp_ent_pair
*
res_type
;
/**< Array of result type/value entity pairs. */
...
...
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