public DataType element_type {
get { return _element_type; }
set {
- _element_type = value;
+ _element_type = value.copy ();
_element_type.parent_node = this;
}
}
public DataType element_type {
get { return _element_type; }
set {
- _element_type = value;
+ _element_type = value.copy ();
_element_type.parent_node = this;
}
}
public DataType type_reference {
get { return _data_type; }
set {
- _data_type = value;
+ _data_type = value.copy ();
_data_type.parent_node = this;
}
}
public DataType? error_type {
get { return _data_type; }
set {
- _data_type = value;
- if (_data_type != null) {
+ _data_type = null;
+ if (value != null) {
+ _data_type = value.copy ();
_data_type.parent_node = this;
}
}
* @param type a class or interface reference
*/
public void add_base_type (DataType type) {
- base_types.add (type);
- type.parent_node = this;
+ var copy = type.copy ();
+ base_types.add (copy);
+ copy.parent_node = this;
}
-
+
/**
* Returns a copy of the base type list.
*
for (int i = 0; i < base_types.size; i++) {
if (base_types[i] == old_type) {
base_types[i] = new_type;
+ new_type.parent_node = this;
return;
}
}
public DataType type_reference {
get { return _data_type; }
set {
- _data_type = value;
+ _data_type = value.copy ();
_data_type.parent_node = this;
}
}
if (type_argument_list == null) {
type_argument_list = new ArrayList<DataType> ();
}
- type_argument_list.add (arg);
- arg.parent_node = this;
+ var copy = arg.copy ();
+ type_argument_list.add (copy);
+ copy.parent_node = this;
}
/**
for (int i = 0; i < type_argument_list.size; i++) {
if (type_argument_list[i] == old_type) {
type_argument_list[i] = new_type;
+ new_type.parent_node = this;
return;
}
}
public DataType return_type {
get { return _return_type; }
set {
- _return_type = value;
+ _return_type = value.copy ();
_return_type.parent_node = this;
}
}
*
* The semantic analyzer computes this value.
*/
- public DataType value_type { get; set; }
+ public DataType value_type {
+ get {
+ return _value_type;
+ }
+
+ set {
+ _value_type = null;
+ if (value != null) {
+ _value_type = value.copy ();
+ _value_type.parent_node = this;
+ }
+ }
+ }
+
+ private DataType _value_type;
+
+ public DataType? formal_value_type {
+ get {
+ return _formal_value_type;
+ }
+ set {
+ _formal_value_type = null;
+ if (value != null) {
+ _formal_value_type = value.copy ();
+ _formal_value_type.parent_node = this;
+ }
+ }
+ }
- public DataType? formal_value_type { get; set; }
+ private DataType _formal_value_type;
/*
* The static type this expression is expected to have.
*
* The semantic analyzer computes this value, lambda expressions use it.
*/
- public DataType target_type { get; set; }
+ public DataType target_type {
+ get {
+ return _target_type;
+ }
+ set {
+ _target_type = null;
+ if (value != null) {
+ _target_type = value.copy ();
+ _target_type.parent_node = this;
+ }
+ }
+ }
+
+ private DataType _target_type;
+
+ public DataType? formal_target_type {
+ get {
+ return _formal_target_type;
+ }
+ set {
+ _formal_target_type = null;
+ if (value != null) {
+ _formal_target_type = value.copy ();
+ _formal_target_type.parent_node = this;
+ }
+ }
+ }
- public DataType? formal_target_type { get; set; }
+ private DataType _formal_target_type;
/**
* The symbol this expression refers to.
public DataType? type_reference {
get { return _data_type; }
set {
- _data_type = value;
- if (_data_type != null) {
+ _data_type = null;
+ if (value != null) {
+ _data_type = value.copy ();
_data_type.parent_node = this;
}
}
* @param type an interface or class reference
*/
public void add_prerequisite (DataType type) {
- prerequisites.add (type);
- type.parent_node = this;
+ var copy = type.copy ();
+ prerequisites.add (copy);
+ copy.parent_node = this;
}
/**
* @param type an interface or class reference
*/
public void prepend_prerequisite (DataType type) {
- prerequisites.insert (0, type);
+ var copy = type.copy ();
+ prerequisites.insert (0, copy);
+ copy.parent_node = this;
}
/**
for (int i = 0; i < prerequisites.size; i++) {
if (prerequisites[i] == old_type) {
prerequisites[i] = new_type;
+ new_type.parent_node = this;
return;
}
}
* @param arg a type reference
*/
public void add_type_argument (DataType arg) {
- type_argument_list.add (arg);
- arg.parent_node = this;
+ var copy = arg.copy ();
+ type_argument_list.add (copy);
+ copy.parent_node = this;
}
/**
for (int i = 0; i < type_argument_list.size; i++) {
if (type_argument_list[i] == old_type) {
type_argument_list[i] = new_type;
+ new_type.parent_node = this;
return;
}
}
public DataType return_type {
get { return _return_type; }
set {
- _return_type = value;
+ _return_type = value.copy ();
_return_type.parent_node = this;
}
}
public DataType type_reference {
get { return _data_type; }
set {
- _data_type = value;
+ _data_type = value.copy ();
_data_type.parent_node = this;
}
}
public DataType base_type {
get { return _base_type; }
set {
- _base_type = value;
+ _base_type = value.copy ();
_base_type.parent_node = this;
}
}
public DataType? property_type {
get { return _data_type; }
set {
- _data_type = value;
+ _data_type = null;
if (value != null) {
+ _data_type = value.copy ();
_data_type.parent_node = this;
}
}
public DataType? value_type {
get { return _value_type; }
set {
- _value_type = value;
+ _value_type = null;
if (value != null) {
+ _value_type = value.copy ();
_value_type.parent_node = this;
}
}
public DataType return_type {
get { return _return_type; }
set {
- _return_type = value;
+ _return_type = value.copy ();
_return_type.parent_node = this;
}
}
public DataType type_reference {
get { return _data_type; }
set {
- _data_type = value;
+ _data_type = value.copy ();
_data_type.parent_node = this;
}
}
public DataType type_reference {
get { return _data_type; }
set {
- _data_type = value;
+ _data_type = value.copy ();
_data_type.parent_node = this;
}
}
public DataType? variable_type {
get { return _variable_type; }
set {
- _variable_type = value;
- if (_variable_type != null) {
+ _variable_type = null;
+ if (value != null) {
+ _variable_type = value.copy ();
_variable_type.parent_node = this;
}
}