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
5d84b5a8
Commit
5d84b5a8
authored
Mar 30, 2014
by
Matthias Braun
Browse files
do not use identifiers with underscore prefix
Underscore prefix is reserved by the C language standard.
parent
5fa09240
Changes
2
Hide whitespace changes
Inline
Side-by-side
ir/tr/type.c
View file @
5d84b5a8
...
...
@@ -85,7 +85,7 @@ void set_master_type_visited(ir_visited_t val)
ir_visited_t
(
get_master_type_visited
)(
void
)
{
return
_
get_master_type_visited
();
return
get_master_type_visited
_
();
}
void
inc_master_type_visited
(
void
)
...
...
@@ -161,22 +161,22 @@ void free_type(ir_type *tp)
void
*
(
get_type_link
)(
const
ir_type
*
tp
)
{
return
_
get_type_link
(
tp
);
return
get_type_link
_
(
tp
);
}
void
(
set_type_link
)(
ir_type
*
tp
,
void
*
l
)
{
_
set_type_link
(
tp
,
l
);
set_type_link
_
(
tp
,
l
);
}
const
tp_op
*
(
get_type_tpop
)(
const
ir_type
*
tp
)
{
return
_
get_type_tpop
(
tp
);
return
get_type_tpop
_
(
tp
);
}
ident
*
(
get_type_tpop_nameid
)(
const
ir_type
*
tp
)
{
return
_
get_type_tpop_nameid
(
tp
);
return
get_type_tpop_nameid
_
(
tp
);
}
const
char
*
get_type_tpop_name
(
const
ir_type
*
tp
)
...
...
@@ -187,12 +187,12 @@ const char* get_type_tpop_name(const ir_type *tp)
tp_opcode
(
get_type_tpop_code
)(
const
ir_type
*
tp
)
{
return
_
get_type_tpop_code
(
tp
);
return
get_type_tpop_code
_
(
tp
);
}
ir_mode
*
(
get_type_mode
)(
const
ir_type
*
tp
)
{
return
_
get_type_mode
(
tp
);
return
get_type_mode
_
(
tp
);
}
void
set_type_mode
(
ir_type
*
tp
,
ir_mode
*
mode
)
...
...
@@ -217,7 +217,7 @@ long get_type_nr(const ir_type *tp)
unsigned
(
get_type_size_bytes
)(
const
ir_type
*
tp
)
{
return
_
get_type_size_bytes
(
tp
);
return
get_type_size_bytes
_
(
tp
);
}
ir_visibility
get_type_visibility
(
const
ir_type
*
tp
)
...
...
@@ -291,7 +291,7 @@ const char *get_type_state_name(ir_type_state s)
ir_type_state
(
get_type_state
)(
const
ir_type
*
tp
)
{
return
_
get_type_state
(
tp
);
return
get_type_state
_
(
tp
);
}
void
set_type_state
(
ir_type
*
tp
,
ir_type_state
state
)
...
...
@@ -338,37 +338,37 @@ void set_type_state(ir_type *tp, ir_type_state state)
ir_visited_t
(
get_type_visited
)(
const
ir_type
*
tp
)
{
return
_
get_type_visited
(
tp
);
return
get_type_visited
_
(
tp
);
}
void
(
set_type_visited
)(
ir_type
*
tp
,
ir_visited_t
num
)
{
_
set_type_visited
(
tp
,
num
);
set_type_visited
_
(
tp
,
num
);
}
void
(
mark_type_visited
)(
ir_type
*
tp
)
{
_
mark_type_visited
(
tp
);
mark_type_visited
_
(
tp
);
}
int
(
type_visited
)(
const
ir_type
*
tp
)
{
return
_
type_visited
(
tp
);
return
type_visited
_
(
tp
);
}
type_dbg_info
*
(
get_type_dbg_info
)(
const
ir_type
*
tp
)
{
return
_
get_type_dbg_info
(
tp
);
return
get_type_dbg_info
_
(
tp
);
}
void
(
set_type_dbg_info
)(
ir_type
*
tp
,
type_dbg_info
*
db
)
{
_
set_type_dbg_info
(
tp
,
db
);
set_type_dbg_info
_
(
tp
,
db
);
}
int
(
is_type
)(
const
void
*
thing
)
{
return
_
is_type
(
thing
);
return
is_type
_
(
thing
);
}
static
void
compound_init
(
ir_type
*
type
)
...
...
@@ -473,7 +473,7 @@ static void add_class_member(ir_type *clss, ir_entity *member)
size_t
(
get_class_n_members
)(
const
ir_type
*
clss
)
{
return
_
get_class_n_members
(
clss
);
return
get_class_n_members
_
(
clss
);
}
size_t
get_class_member_index
(
const
ir_type
*
clss
,
ir_entity
*
mem
)
...
...
@@ -484,7 +484,7 @@ size_t get_class_member_index(const ir_type *clss, ir_entity *mem)
ir_entity
*
(
get_class_member
)(
const
ir_type
*
clss
,
size_t
pos
)
{
return
_
get_class_member
(
clss
,
pos
);
return
get_class_member
_
(
clss
,
pos
);
}
static
void
remove_class_member
(
ir_type
*
clss
,
ir_entity
*
member
)
...
...
@@ -609,7 +609,7 @@ void remove_class_supertype(ir_type *clss, ir_type *supertype)
int
(
is_Class_type
)(
const
ir_type
*
clss
)
{
return
_
is_class_type
(
clss
);
return
is_class_type
_
(
clss
);
}
void
set_class_mode
(
ir_type
*
tp
,
ir_mode
*
mode
)
...
...
@@ -690,7 +690,7 @@ static void remove_struct_member(ir_type *strct, ir_entity *member)
int
(
is_Struct_type
)(
const
ir_type
*
strct
)
{
return
_
is_struct_type
(
strct
);
return
is_struct_type
_
(
strct
);
}
void
set_struct_mode
(
ir_type
*
tp
,
ir_mode
*
mode
)
...
...
@@ -752,7 +752,7 @@ void free_method_attrs(ir_type *method)
size_t
(
get_method_n_params
)(
const
ir_type
*
method
)
{
return
_
get_method_n_params
(
method
);
return
get_method_n_params
_
(
method
);
}
ir_type
*
get_method_param_type
(
const
ir_type
*
method
,
size_t
pos
)
...
...
@@ -772,7 +772,7 @@ void set_method_param_type(ir_type *method, size_t pos, ir_type *tp)
size_t
(
get_method_n_ress
)(
const
ir_type
*
method
)
{
return
_
get_method_n_ress
(
method
);
return
get_method_n_ress
_
(
method
);
}
ir_type
*
get_method_res_type
(
const
ir_type
*
method
,
size_t
pos
)
...
...
@@ -816,28 +816,28 @@ void set_method_variadicity(ir_type *method, ir_variadicity vari)
mtp_additional_properties
(
get_method_additional_properties
)(
const
ir_type
*
method
)
{
return
_
get_method_additional_properties
(
method
);
return
get_method_additional_properties
_
(
method
);
}
void
(
set_method_additional_properties
)(
ir_type
*
method
,
mtp_additional_properties
mask
)
{
_
set_method_additional_properties
(
method
,
mask
);
set_method_additional_properties
_
(
method
,
mask
);
}
void
(
add_method_additional_properties
)(
ir_type
*
method
,
mtp_additional_properties
flag
)
{
_
add_method_additional_properties
(
method
,
flag
);
add_method_additional_properties
_
(
method
,
flag
);
}
unsigned
(
get_method_calling_convention
)(
const
ir_type
*
method
)
{
return
_
get_method_calling_convention
(
method
);
return
get_method_calling_convention
_
(
method
);
}
void
(
set_method_calling_convention
)(
ir_type
*
method
,
unsigned
cc_mask
)
{
_
set_method_calling_convention
(
method
,
cc_mask
);
set_method_calling_convention
_
(
method
,
cc_mask
);
}
unsigned
get_method_n_regparams
(
ir_type
*
method
)
...
...
@@ -858,7 +858,7 @@ void set_method_n_regparams(ir_type *method, unsigned n_regs)
int
(
is_Method_type
)(
const
ir_type
*
method
)
{
return
_
is_method_type
(
method
);
return
is_method_type
_
(
method
);
}
ir_type
*
new_type_union
(
ident
*
name
)
...
...
@@ -928,7 +928,7 @@ static void remove_union_member(ir_type *uni, ir_entity *member)
int
(
is_Union_type
)(
const
ir_type
*
uni
)
{
return
_
is_union_type
(
uni
);
return
is_union_type
_
(
uni
);
}
ir_type
*
new_type_segment
(
ident
*
const
name
,
type_flags
const
flags
)
...
...
@@ -1038,7 +1038,7 @@ void set_array_variable_size(ir_type *array, int flag)
int
(
is_Array_type
)(
const
ir_type
*
array
)
{
return
_
is_array_type
(
array
);
return
is_array_type
_
(
array
);
}
...
...
@@ -1067,7 +1067,7 @@ ir_type *get_pointer_points_to_type(const ir_type *pointer)
int
(
is_Pointer_type
)(
const
ir_type
*
pointer
)
{
return
_
is_pointer_type
(
pointer
);
return
is_pointer_type
_
(
pointer
);
}
void
set_pointer_mode
(
ir_type
*
tp
,
ir_mode
*
mode
)
...
...
@@ -1100,7 +1100,7 @@ ir_type *new_type_primitive(ir_mode *mode)
int
(
is_Primitive_type
)(
const
ir_type
*
primitive
)
{
return
_
is_primitive_type
(
primitive
);
return
is_primitive_type
_
(
primitive
);
}
void
set_primitive_mode
(
ir_type
*
tp
,
ir_mode
*
mode
)
...
...
@@ -1116,7 +1116,7 @@ void set_primitive_mode(ir_type *tp, ir_mode *mode)
int
(
is_atomic_type
)(
const
ir_type
*
tp
)
{
return
_
is_atomic_type
(
tp
);
return
is_atomic_type
_
(
tp
);
}
size_t
get_compound_n_members
(
const
ir_type
*
tp
)
...
...
ir/tr/type_t.h
View file @
5d84b5a8
...
...
@@ -19,39 +19,39 @@
#include "array.h"
#define get_master_type_visited()
_
get_master_type_visited()
#define get_type_link(tp)
_
get_type_link(tp)
#define set_type_link(tp, l)
_
set_type_link(tp, l)
#define get_type_tpop(tp)
_
get_type_tpop(tp)
#define get_type_tpop_nameid(tp)
_
get_type_tpop_nameid(tp)
#define get_type_tpop_code(tp)
_
get_type_tpop_code(tp)
#define get_type_mode(tp)
_
get_type_mode(tp)
#define get_type_size_bytes(tp)
_
get_type_size_bytes(tp)
#define get_type_state(tp)
_
get_type_state(tp)
#define get_type_visited(tp)
_
get_type_visited(tp)
#define set_type_visited(tp, num)
_
set_type_visited(tp, num)
#define mark_type_visited(tp)
_
mark_type_visited(tp)
#define type_visited(tp)
_
type_visited(tp)
#define get_type_dbg_info(tp)
_
get_type_dbg_info(tp)
#define set_type_dbg_info(tp, db)
_
set_type_dbg_info(tp, db)
#define is_type(thing)
_
is_type(thing)
#define is_Class_type(clss)
_
is_class_type(clss)
#define get_class_n_members(clss)
_
get_class_n_members(clss)
#define get_class_member(clss, pos)
_
get_class_member(clss, pos)
#define is_Struct_type(strct)
_
is_struct_type(strct)
#define is_Method_type(method)
_
is_method_type(method)
#define is_Union_type(uni)
_
is_union_type(uni)
#define is_Array_type(array)
_
is_array_type(array)
#define is_Pointer_type(pointer)
_
is_pointer_type(pointer)
#define is_Primitive_type(primitive)
_
is_primitive_type(primitive)
#define is_atomic_type(tp)
_
is_atomic_type(tp)
#define get_method_n_params(method)
_
get_method_n_params(method)
#define get_method_n_ress(method)
_
get_method_n_ress(method)
#define get_method_additional_properties(method)
_
get_method_additional_properties(method)
#define set_method_additional_properties(method, mask)
_
set_method_additional_properties(method, mask)
#define add_method_additional_properties(method, flag)
_
add_method_additional_properties(method, flag)
#define get_method_calling_convention(method)
_
get_method_calling_convention(method)
#define set_method_calling_convention(method, cc_mask)
_
set_method_calling_convention(method, cc_mask)
#define get_master_type_visited() get_master_type_visited
_
()
#define get_type_link(tp) get_type_link
_
(tp)
#define set_type_link(tp, l) set_type_link
_
(tp, l)
#define get_type_tpop(tp) get_type_tpop
_
(tp)
#define get_type_tpop_nameid(tp) get_type_tpop_nameid
_
(tp)
#define get_type_tpop_code(tp) get_type_tpop_code
_
(tp)
#define get_type_mode(tp) get_type_mode
_
(tp)
#define get_type_size_bytes(tp) get_type_size_bytes
_
(tp)
#define get_type_state(tp) get_type_state
_
(tp)
#define get_type_visited(tp) get_type_visited
_
(tp)
#define set_type_visited(tp, num) set_type_visited
_
(tp, num)
#define mark_type_visited(tp) mark_type_visited
_
(tp)
#define type_visited(tp) type_visited
_
(tp)
#define get_type_dbg_info(tp) get_type_dbg_info
_
(tp)
#define set_type_dbg_info(tp, db) set_type_dbg_info
_
(tp, db)
#define is_type(thing) is_type
_
(thing)
#define is_Class_type(clss) is_class_type
_
(clss)
#define get_class_n_members(clss) get_class_n_members
_
(clss)
#define get_class_member(clss, pos) get_class_member
_
(clss, pos)
#define is_Struct_type(strct) is_struct_type
_
(strct)
#define is_Method_type(method) is_method_type
_
(method)
#define is_Union_type(uni) is_union_type
_
(uni)
#define is_Array_type(array) is_array_type
_
(array)
#define is_Pointer_type(pointer) is_pointer_type
_
(pointer)
#define is_Primitive_type(primitive) is_primitive_type
_
(primitive)
#define is_atomic_type(tp) is_atomic_type
_
(tp)
#define get_method_n_params(method) get_method_n_params
_
(method)
#define get_method_n_ress(method) get_method_n_ress
_
(method)
#define get_method_additional_properties(method) get_method_additional_properties
_
(method)
#define set_method_additional_properties(method, mask) set_method_additional_properties
_
(method, mask)
#define add_method_additional_properties(method, flag) add_method_additional_properties
_
(method, flag)
#define get_method_calling_convention(method) get_method_calling_convention
_
(method)
#define set_method_calling_convention(method, cc_mask) set_method_calling_convention
_
(method, cc_mask)
/** Compound type attributes. */
typedef
struct
{
...
...
@@ -196,7 +196,7 @@ ir_type *clone_type_method(ir_type *tp);
extern
ir_visited_t
firm_type_visited
;
static
inline
ir_visited_t
_
get_master_type_visited
(
void
)
static
inline
ir_visited_t
get_master_type_visited
_
(
void
)
{
return
firm_type_visited
;
}
...
...
@@ -217,187 +217,187 @@ static inline void set_higher_type(ir_type *tp, ir_type *higher_type)
tp
->
higher_type
=
higher_type
;
}
static
inline
void
*
_
get_type_link
(
const
ir_type
*
tp
)
static
inline
void
*
get_type_link
_
(
const
ir_type
*
tp
)
{
assert
(
tp
->
kind
==
k_type
);
return
(
tp
->
link
);
}
static
inline
void
_
set_type_link
(
ir_type
*
tp
,
void
*
l
)
static
inline
void
set_type_link
_
(
ir_type
*
tp
,
void
*
l
)
{
assert
(
tp
->
kind
==
k_type
);
tp
->
link
=
l
;
}
static
inline
const
tp_op
*
_
get_type_tpop
(
const
ir_type
*
tp
)
static
inline
const
tp_op
*
get_type_tpop
_
(
const
ir_type
*
tp
)
{
assert
(
tp
->
kind
==
k_type
);
return
tp
->
type_op
;
}
static
inline
ident
*
_
get_type_tpop_nameid
(
const
ir_type
*
tp
)
static
inline
ident
*
get_type_tpop_nameid
_
(
const
ir_type
*
tp
)
{
assert
(
tp
->
kind
==
k_type
);
return
get_tpop_ident
(
tp
->
type_op
);
}
static
inline
tp_opcode
_
get_type_tpop_code
(
const
ir_type
*
tp
)
static
inline
tp_opcode
get_type_tpop_code
_
(
const
ir_type
*
tp
)
{
assert
(
tp
->
kind
==
k_type
);
return
get_tpop_code
(
tp
->
type_op
);
}
static
inline
ir_mode
*
_
get_type_mode
(
const
ir_type
*
tp
)
static
inline
ir_mode
*
get_type_mode
_
(
const
ir_type
*
tp
)
{
assert
(
tp
->
kind
==
k_type
);
return
tp
->
mode
;
}
static
inline
unsigned
_
get_type_size_bytes
(
const
ir_type
*
tp
)
static
inline
unsigned
get_type_size_bytes
_
(
const
ir_type
*
tp
)
{
assert
(
tp
->
kind
==
k_type
);
return
tp
->
size
;
}
static
inline
ir_type_state
_
get_type_state
(
const
ir_type
*
tp
)
static
inline
ir_type_state
get_type_state
_
(
const
ir_type
*
tp
)
{
assert
(
tp
->
kind
==
k_type
);
return
tp
->
flags
&
tf_layout_fixed
?
layout_fixed
:
layout_undefined
;
}
static
inline
ir_visited_t
_
get_type_visited
(
const
ir_type
*
tp
)
static
inline
ir_visited_t
get_type_visited
_
(
const
ir_type
*
tp
)
{
assert
(
tp
->
kind
==
k_type
);
return
tp
->
visit
;
}
static
inline
void
_
set_type_visited
(
ir_type
*
tp
,
ir_visited_t
num
)
static
inline
void
set_type_visited
_
(
ir_type
*
tp
,
ir_visited_t
num
)
{
assert
(
tp
->
kind
==
k_type
);
tp
->
visit
=
num
;
}
static
inline
void
_
mark_type_visited
(
ir_type
*
tp
)
static
inline
void
mark_type_visited
_
(
ir_type
*
tp
)
{
assert
(
tp
->
kind
==
k_type
);
assert
(
tp
->
visit
<
firm_type_visited
);
tp
->
visit
=
firm_type_visited
;
}
static
inline
int
_
type_visited
(
const
ir_type
*
tp
)
static
inline
int
type_visited
_
(
const
ir_type
*
tp
)
{
assert
(
tp
->
kind
==
k_type
);
return
tp
->
visit
>=
firm_type_visited
;
}
static
inline
type_dbg_info
*
_
get_type_dbg_info
(
const
ir_type
*
tp
)
static
inline
type_dbg_info
*
get_type_dbg_info
_
(
const
ir_type
*
tp
)
{
return
tp
->
dbi
;
}
static
inline
void
_
set_type_dbg_info
(
ir_type
*
tp
,
type_dbg_info
*
db
)
static
inline
void
set_type_dbg_info
_
(
ir_type
*
tp
,
type_dbg_info
*
db
)
{
tp
->
dbi
=
db
;
}
static
inline
int
_
is_type
(
const
void
*
thing
)
static
inline
int
is_type
_
(
const
void
*
thing
)
{
return
get_kind
(
thing
)
==
k_type
;
}
static
inline
int
_
is_class_type
(
const
ir_type
*
clss
)
static
inline
int
is_class_type
_
(
const
ir_type
*
clss
)
{
return
clss
->
type_op
==
type_class
;
}
static
inline
size_t
_
get_class_n_members
(
const
ir_type
*
clss
)
static
inline
size_t
get_class_n_members
_
(
const
ir_type
*
clss
)
{
assert
(
clss
->
type_op
==
type_class
);
return
ARR_LEN
(
clss
->
attr
.
ca
.
members
);
}
static
inline
ir_entity
*
_
get_class_member
(
const
ir_type
*
clss
,
size_t
pos
)
static
inline
ir_entity
*
get_class_member
_
(
const
ir_type
*
clss
,
size_t
pos
)
{
assert
(
clss
->
type_op
==
type_class
);
assert
(
pos
<
_
get_class_n_members
(
clss
));
assert
(
pos
<
get_class_n_members
_
(
clss
));
return
clss
->
attr
.
ca
.
members
[
pos
];
}
static
inline
int
_
is_struct_type
(
const
ir_type
*
strct
)
static
inline
int
is_struct_type
_
(
const
ir_type
*
strct
)
{
return
(
strct
->
type_op
==
type_struct
);
}
static
inline
int
_
is_method_type
(
const
ir_type
*
method
)
static
inline
int
is_method_type
_
(
const
ir_type
*
method
)
{
return
(
method
->
type_op
==
type_method
);
}
static
inline
int
_
is_union_type
(
const
ir_type
*
uni
)
static
inline
int
is_union_type
_
(
const
ir_type
*
uni
)
{
return
(
uni
->
type_op
==
type_union
);
}
static
inline
int
_
is_array_type
(
const
ir_type
*
array
)
static
inline
int
is_array_type
_
(
const
ir_type
*
array
)
{
return
(
array
->
type_op
==
type_array
);
}
static
inline
int
_
is_pointer_type
(
const
ir_type
*
pointer
)
static
inline
int
is_pointer_type
_
(
const
ir_type
*
pointer
)
{
return
(
pointer
->
type_op
==
type_pointer
);
}
/** Returns true if a type is a primitive type. */
static
inline
int
_
is_primitive_type
(
const
ir_type
*
primitive
)
static
inline
int
is_primitive_type
_
(
const
ir_type
*
primitive
)
{
assert
(
primitive
->
kind
==
k_type
);
return
(
primitive
->
type_op
==
type_primitive
);
}
static
inline
int
_
is_atomic_type
(
const
ir_type
*
tp
)
static
inline
int
is_atomic_type
_
(
const
ir_type
*
tp
)
{
assert
(
tp
->
kind
==
k_type
);
return
_
is_
p
rimitive_type
(
tp
)
||
_
is_
p
ointer_type
(
tp
);
return
is_
P
rimitive_type
(
tp
)
||
is_
P
ointer_type
(
tp
);
}
static
inline
size_t
_
get_method_n_params
(
const
ir_type
*
method
)
static
inline
size_t
get_method_n_params
_
(
const
ir_type
*
method
)
{
assert
(
method
->
type_op
==
type_method
);
return
method
->
attr
.
ma
.
n_params
;
}
static
inline
size_t
_
get_method_n_ress
(
const
ir_type
*
method
)
static
inline
size_t
get_method_n_ress
_
(
const
ir_type
*
method
)
{
assert
(
method
->
type_op
==
type_method
);
return
method
->
attr
.
ma
.
n_res
;
}
static
inline
mtp_additional_properties
_
get_method_additional_properties
(
const
ir_type
*
method
)
static
inline
mtp_additional_properties
get_method_additional_properties
_
(
const
ir_type
*
method
)
{
assert
(
method
->
type_op
==
type_method
);
return
method
->
attr
.
ma
.
properties
;
}
static
inline
void
_
set_method_additional_properties
(
ir_type
*
method
,
mtp_additional_properties
properties
)
static
inline
void
set_method_additional_properties
_
(
ir_type
*
method
,
mtp_additional_properties
properties
)
{
assert
(
method
->
type_op
==
type_method
);
method
->
attr
.
ma
.
properties
=
properties
;
}
static
inline
void
_
add_method_additional_properties
(
ir_type
*
method
,
mtp_additional_properties
properties
)
static
inline
void
add_method_additional_properties
_
(
ir_type
*
method
,
mtp_additional_properties
properties
)
{
assert
(
method
->
type_op
==
type_method
);
method
->
attr
.
ma
.
properties
|=
properties
;
}
static
inline
unsigned
_
get_method_calling_convention
(
const
ir_type
*
method
)
static
inline
unsigned
get_method_calling_convention
_
(
const
ir_type
*
method
)
{
assert
(
method
->
type_op
==
type_method
);
return
method
->
attr
.
ma
.
irg_calling_conv
;
}
static
inline
void
_
set_method_calling_convention
(
ir_type
*
method
,
unsigned
cc_mask
)
static
inline
void
set_method_calling_convention
_
(
ir_type
*
method
,
unsigned
cc_mask
)
{
assert
(
method
->
type_op
==
type_method
);
method
->
attr
.
ma
.
irg_calling_conv
=
cc_mask
;
...
...
Write
Preview
Markdown
is supported
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