aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2022-08-10 16:53:11 +0200
committerTristan Gingold <tgingold@free.fr>2022-08-10 16:53:11 +0200
commitaabb982856fed89ebb696127803577fcec036508 (patch)
tree69f2803b38b611701e1d26cf2ef2583e1256e554
parentcb3e7b0f954f91c7a1d4702006b18d0041d6eb0d (diff)
downloadghdl-aabb982856fed89ebb696127803577fcec036508.tar.gz
ghdl-aabb982856fed89ebb696127803577fcec036508.tar.bz2
ghdl-aabb982856fed89ebb696127803577fcec036508.zip
vhdl: add Determined_Aggregate_Flag field. For #2166
-rw-r--r--pyGHDL/libghdl/vhdl/nodes.py13
-rw-r--r--pyGHDL/libghdl/vhdl/nodes_meta.py133
-rw-r--r--src/vhdl/vhdl-nodes.adb16
-rw-r--r--src/vhdl/vhdl-nodes.ads7
-rw-r--r--src/vhdl/vhdl-nodes_meta.adb283
-rw-r--r--src/vhdl/vhdl-nodes_meta.ads2
-rw-r--r--src/vhdl/vhdl-sem_expr.adb3
7 files changed, 260 insertions, 197 deletions
diff --git a/pyGHDL/libghdl/vhdl/nodes.py b/pyGHDL/libghdl/vhdl/nodes.py
index 0497aeb8c..2d0d857d4 100644
--- a/pyGHDL/libghdl/vhdl/nodes.py
+++ b/pyGHDL/libghdl/vhdl/nodes.py
@@ -6108,6 +6108,19 @@ def Set_Aggregate_Expand_Flag(obj: Iir, value: Boolean) -> None:
@export
+@BindToLibGHDL("vhdl__nodes__get_determined_aggregate_flag")
+def Get_Determined_Aggregate_Flag(obj: Iir) -> Boolean:
+ """"""
+ return 0
+
+
+@export
+@BindToLibGHDL("vhdl__nodes__set_determined_aggregate_flag")
+def Set_Determined_Aggregate_Flag(obj: Iir, value: Boolean) -> None:
+ """"""
+
+
+@export
@BindToLibGHDL("vhdl__nodes__get_association_choices_chain")
def Get_Association_Choices_Chain(obj: Iir) -> Iir:
""""""
diff --git a/pyGHDL/libghdl/vhdl/nodes_meta.py b/pyGHDL/libghdl/vhdl/nodes_meta.py
index 474905914..505c84fb7 100644
--- a/pyGHDL/libghdl/vhdl/nodes_meta.py
+++ b/pyGHDL/libghdl/vhdl/nodes_meta.py
@@ -435,69 +435,70 @@ class fields(IntEnum):
Aggr_Others_Flag = 315
Aggr_Named_Flag = 316
Aggregate_Expand_Flag = 317
- Association_Choices_Chain = 318
- Case_Statement_Alternative_Chain = 319
- Matching_Flag = 320
- Choice_Staticness = 321
- Procedure_Call = 322
- Implementation = 323
- Parameter_Association_Chain = 324
- Method_Object = 325
- Subtype_Type_Mark = 326
- Subnature_Nature_Mark = 327
- Type_Conversion_Subtype = 328
- Type_Mark = 329
- File_Type_Mark = 330
- Return_Type_Mark = 331
- Has_Disconnect_Flag = 332
- Has_Active_Flag = 333
- Is_Within_Flag = 334
- Type_Marks_List = 335
- Implicit_Alias_Flag = 336
- Alias_Signature = 337
- Attribute_Signature = 338
- Overload_List = 339
- Simple_Name_Identifier = 340
- Simple_Name_Subtype = 341
- Protected_Type_Body = 342
- Protected_Type_Declaration = 343
- Use_Flag = 344
- End_Has_Reserved_Id = 345
- End_Has_Identifier = 346
- End_Has_Postponed = 347
- Has_Label = 348
- Has_Begin = 349
- Has_End = 350
- Has_Is = 351
- Has_Pure = 352
- Has_Body = 353
- Has_Parameter = 354
- Has_Component = 355
- Has_Identifier_List = 356
- Has_Mode = 357
- Has_Class = 358
- Has_Delay_Mechanism = 359
- Suspend_Flag = 360
- Stop_Flag = 361
- Is_Ref = 362
- Is_Forward_Ref = 363
- Psl_Property = 364
- Psl_Sequence = 365
- Psl_Declaration = 366
- Psl_Expression = 367
- Psl_Boolean = 368
- PSL_Clock = 369
- PSL_NFA = 370
- PSL_Nbr_States = 371
- PSL_Clock_Sensitivity = 372
- PSL_EOS_Flag = 373
- PSL_Abort_Flag = 374
- Count_Expression = 375
- Clock_Expression = 376
- Default_Clock = 377
- Foreign_Node = 378
- Suspend_State_Index = 379
- Suspend_State_Chain = 380
+ Determined_Aggregate_Flag = 318
+ Association_Choices_Chain = 319
+ Case_Statement_Alternative_Chain = 320
+ Matching_Flag = 321
+ Choice_Staticness = 322
+ Procedure_Call = 323
+ Implementation = 324
+ Parameter_Association_Chain = 325
+ Method_Object = 326
+ Subtype_Type_Mark = 327
+ Subnature_Nature_Mark = 328
+ Type_Conversion_Subtype = 329
+ Type_Mark = 330
+ File_Type_Mark = 331
+ Return_Type_Mark = 332
+ Has_Disconnect_Flag = 333
+ Has_Active_Flag = 334
+ Is_Within_Flag = 335
+ Type_Marks_List = 336
+ Implicit_Alias_Flag = 337
+ Alias_Signature = 338
+ Attribute_Signature = 339
+ Overload_List = 340
+ Simple_Name_Identifier = 341
+ Simple_Name_Subtype = 342
+ Protected_Type_Body = 343
+ Protected_Type_Declaration = 344
+ Use_Flag = 345
+ End_Has_Reserved_Id = 346
+ End_Has_Identifier = 347
+ End_Has_Postponed = 348
+ Has_Label = 349
+ Has_Begin = 350
+ Has_End = 351
+ Has_Is = 352
+ Has_Pure = 353
+ Has_Body = 354
+ Has_Parameter = 355
+ Has_Component = 356
+ Has_Identifier_List = 357
+ Has_Mode = 358
+ Has_Class = 359
+ Has_Delay_Mechanism = 360
+ Suspend_Flag = 361
+ Stop_Flag = 362
+ Is_Ref = 363
+ Is_Forward_Ref = 364
+ Psl_Property = 365
+ Psl_Sequence = 366
+ Psl_Declaration = 367
+ Psl_Expression = 368
+ Psl_Boolean = 369
+ PSL_Clock = 370
+ PSL_NFA = 371
+ PSL_Nbr_States = 372
+ PSL_Clock_Sensitivity = 373
+ PSL_EOS_Flag = 374
+ PSL_Abort_Flag = 375
+ Count_Expression = 376
+ Clock_Expression = 377
+ Default_Clock = 378
+ Foreign_Node = 379
+ Suspend_State_Index = 380
+ Suspend_State_Chain = 381
def Get_Boolean(node, field):
@@ -2541,6 +2542,12 @@ def Has_Aggregate_Expand_Flag(kind: IirKind) -> bool:
@export
+@BindToLibGHDL("vhdl__nodes_meta__has_determined_aggregate_flag")
+def Has_Determined_Aggregate_Flag(kind: IirKind) -> bool:
+ """"""
+
+
+@export
@BindToLibGHDL("vhdl__nodes_meta__has_association_choices_chain")
def Has_Association_Choices_Chain(kind: IirKind) -> bool:
""""""
diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb
index f03e1ab92..9a12aae6c 100644
--- a/src/vhdl/vhdl-nodes.adb
+++ b/src/vhdl/vhdl-nodes.adb
@@ -6528,6 +6528,22 @@ package body Vhdl.Nodes is
Set_Flag1 (Aggr, Flag);
end Set_Aggregate_Expand_Flag;
+ function Get_Determined_Aggregate_Flag (Aggr : Iir) return Boolean is
+ begin
+ pragma Assert (Aggr /= Null_Iir);
+ pragma Assert (Has_Determined_Aggregate_Flag (Get_Kind (Aggr)),
+ "no field Determined_Aggregate_Flag");
+ return Get_Flag2 (Aggr);
+ end Get_Determined_Aggregate_Flag;
+
+ procedure Set_Determined_Aggregate_Flag (Aggr : Iir; Flag : Boolean) is
+ begin
+ pragma Assert (Aggr /= Null_Iir);
+ pragma Assert (Has_Determined_Aggregate_Flag (Get_Kind (Aggr)),
+ "no field Determined_Aggregate_Flag");
+ Set_Flag2 (Aggr, Flag);
+ end Set_Determined_Aggregate_Flag;
+
function Get_Association_Choices_Chain (Target : Iir) return Iir is
begin
pragma Assert (Target /= Null_Iir);
diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads
index 16907b607..f352542a1 100644
--- a/src/vhdl/vhdl-nodes.ads
+++ b/src/vhdl/vhdl-nodes.ads
@@ -4248,6 +4248,8 @@ package Vhdl.Nodes is
-- If true, the aggregate can be statically built. This is an optimization
-- and the conditions are defined in sem_expr.
-- Get/Set_Aggregate_Expand_Flag (Flag1)
+ --
+ -- Get/Set_Determined_Aggregate_Flag (Flag2)
-- Iir_Kind_Aggregate_Info (Short)
--
@@ -9263,6 +9265,11 @@ package Vhdl.Nodes is
function Get_Aggregate_Expand_Flag (Aggr : Iir) return Boolean;
procedure Set_Aggregate_Expand_Flag (Aggr : Iir; Flag : Boolean);
+ -- True if the bounds of the aggregated are determined by the context.
+ -- Field: Flag2
+ function Get_Determined_Aggregate_Flag (Aggr : Iir) return Boolean;
+ procedure Set_Determined_Aggregate_Flag (Aggr : Iir; Flag : Boolean);
+
-- Chain of choices.
-- Field: Field4 Chain
function Get_Association_Choices_Chain (Target : Iir) return Iir;
diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb
index e6e3129d3..310f31d86 100644
--- a/src/vhdl/vhdl-nodes_meta.adb
+++ b/src/vhdl/vhdl-nodes_meta.adb
@@ -335,6 +335,7 @@ package body Vhdl.Nodes_Meta is
Field_Aggr_Others_Flag => Type_Boolean,
Field_Aggr_Named_Flag => Type_Boolean,
Field_Aggregate_Expand_Flag => Type_Boolean,
+ Field_Determined_Aggregate_Flag => Type_Boolean,
Field_Association_Choices_Chain => Type_Iir,
Field_Case_Statement_Alternative_Chain => Type_Iir,
Field_Matching_Flag => Type_Boolean,
@@ -1044,6 +1045,8 @@ package body Vhdl.Nodes_Meta is
return "aggr_named_flag";
when Field_Aggregate_Expand_Flag =>
return "aggregate_expand_flag";
+ when Field_Determined_Aggregate_Flag =>
+ return "determined_aggregate_flag";
when Field_Association_Choices_Chain =>
return "association_choices_chain";
when Field_Case_Statement_Alternative_Chain =>
@@ -2462,6 +2465,8 @@ package body Vhdl.Nodes_Meta is
return Attr_None;
when Field_Aggregate_Expand_Flag =>
return Attr_None;
+ when Field_Determined_Aggregate_Flag =>
+ return Attr_None;
when Field_Association_Choices_Chain =>
return Attr_Chain;
when Field_Case_Statement_Alternative_Chain =>
@@ -4240,6 +4245,7 @@ package body Vhdl.Nodes_Meta is
Field_Base_Name,
-- Iir_Kind_Aggregate
Field_Aggregate_Expand_Flag,
+ Field_Determined_Aggregate_Flag,
Field_Expr_Staticness,
Field_Association_Choices_Chain,
Field_Literal_Subtype,
@@ -5512,140 +5518,140 @@ package body Vhdl.Nodes_Meta is
Iir_Kind_Remainder_Operator => 1443,
Iir_Kind_Exponentiation_Operator => 1448,
Iir_Kind_Function_Call => 1456,
- Iir_Kind_Aggregate => 1463,
- Iir_Kind_Parenthesis_Expression => 1466,
- Iir_Kind_Qualified_Expression => 1470,
- Iir_Kind_Type_Conversion => 1475,
- Iir_Kind_Allocator_By_Expression => 1480,
- Iir_Kind_Allocator_By_Subtype => 1486,
- Iir_Kind_Selected_Element => 1494,
- Iir_Kind_Dereference => 1499,
- Iir_Kind_Implicit_Dereference => 1504,
- Iir_Kind_Slice_Name => 1511,
- Iir_Kind_Indexed_Name => 1517,
- Iir_Kind_Psl_Prev => 1523,
- Iir_Kind_Psl_Stable => 1528,
- Iir_Kind_Psl_Rose => 1533,
- Iir_Kind_Psl_Fell => 1538,
- Iir_Kind_Psl_Onehot => 1541,
- Iir_Kind_Psl_Onehot0 => 1544,
- Iir_Kind_Psl_Expression => 1546,
- Iir_Kind_Sensitized_Process_Statement => 1568,
- Iir_Kind_Process_Statement => 1589,
- Iir_Kind_Concurrent_Simple_Signal_Assignment => 1602,
- Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1615,
- Iir_Kind_Concurrent_Selected_Signal_Assignment => 1629,
- Iir_Kind_Concurrent_Assertion_Statement => 1637,
- Iir_Kind_Concurrent_Procedure_Call_Statement => 1644,
- Iir_Kind_Concurrent_Break_Statement => 1652,
- Iir_Kind_Psl_Assert_Directive => 1666,
- Iir_Kind_Psl_Assume_Directive => 1678,
- Iir_Kind_Psl_Cover_Directive => 1690,
- Iir_Kind_Psl_Restrict_Directive => 1701,
- Iir_Kind_Block_Statement => 1715,
- Iir_Kind_If_Generate_Statement => 1726,
- Iir_Kind_Case_Generate_Statement => 1735,
- Iir_Kind_For_Generate_Statement => 1744,
- Iir_Kind_Component_Instantiation_Statement => 1755,
- Iir_Kind_Psl_Default_Clock => 1758,
- Iir_Kind_Generate_Statement_Body => 1769,
- Iir_Kind_If_Generate_Else_Clause => 1775,
- Iir_Kind_Simple_Simultaneous_Statement => 1782,
- Iir_Kind_Simultaneous_Null_Statement => 1786,
- Iir_Kind_Simultaneous_Procedural_Statement => 1797,
- Iir_Kind_Simultaneous_Case_Statement => 1806,
- Iir_Kind_Simultaneous_If_Statement => 1815,
- Iir_Kind_Simultaneous_Elsif => 1821,
- Iir_Kind_Simple_Signal_Assignment_Statement => 1832,
- Iir_Kind_Conditional_Signal_Assignment_Statement => 1843,
- Iir_Kind_Selected_Waveform_Assignment_Statement => 1855,
- Iir_Kind_Signal_Force_Assignment_Statement => 1865,
- Iir_Kind_Signal_Release_Assignment_Statement => 1874,
- Iir_Kind_Null_Statement => 1878,
- Iir_Kind_Assertion_Statement => 1885,
- Iir_Kind_Report_Statement => 1891,
- Iir_Kind_Wait_Statement => 1899,
- Iir_Kind_Variable_Assignment_Statement => 1906,
- Iir_Kind_Conditional_Variable_Assignment_Statement => 1913,
- Iir_Kind_Return_Statement => 1919,
- Iir_Kind_For_Loop_Statement => 1930,
- Iir_Kind_While_Loop_Statement => 1941,
- Iir_Kind_Next_Statement => 1948,
- Iir_Kind_Exit_Statement => 1955,
- Iir_Kind_Case_Statement => 1964,
- Iir_Kind_Procedure_Call_Statement => 1970,
- Iir_Kind_Break_Statement => 1977,
- Iir_Kind_If_Statement => 1987,
- Iir_Kind_Suspend_State_Statement => 1991,
- Iir_Kind_Elsif => 1997,
- Iir_Kind_Character_Literal => 2004,
- Iir_Kind_Simple_Name => 2011,
- Iir_Kind_Selected_Name => 2019,
- Iir_Kind_Operator_Symbol => 2024,
- Iir_Kind_Reference_Name => 2029,
- Iir_Kind_External_Constant_Name => 2038,
- Iir_Kind_External_Signal_Name => 2047,
- Iir_Kind_External_Variable_Name => 2057,
- Iir_Kind_Selected_By_All_Name => 2063,
- Iir_Kind_Parenthesis_Name => 2068,
- Iir_Kind_Package_Pathname => 2072,
- Iir_Kind_Absolute_Pathname => 2073,
- Iir_Kind_Relative_Pathname => 2074,
- Iir_Kind_Pathname_Element => 2079,
- Iir_Kind_Base_Attribute => 2081,
- Iir_Kind_Subtype_Attribute => 2086,
- Iir_Kind_Element_Attribute => 2091,
- Iir_Kind_Across_Attribute => 2096,
- Iir_Kind_Through_Attribute => 2101,
- Iir_Kind_Nature_Reference_Attribute => 2105,
- Iir_Kind_Left_Type_Attribute => 2110,
- Iir_Kind_Right_Type_Attribute => 2115,
- Iir_Kind_High_Type_Attribute => 2120,
- Iir_Kind_Low_Type_Attribute => 2125,
- Iir_Kind_Ascending_Type_Attribute => 2130,
- Iir_Kind_Image_Attribute => 2136,
- Iir_Kind_Value_Attribute => 2142,
- Iir_Kind_Pos_Attribute => 2148,
- Iir_Kind_Val_Attribute => 2154,
- Iir_Kind_Succ_Attribute => 2160,
- Iir_Kind_Pred_Attribute => 2166,
- Iir_Kind_Leftof_Attribute => 2172,
- Iir_Kind_Rightof_Attribute => 2178,
- Iir_Kind_Signal_Slew_Attribute => 2186,
- Iir_Kind_Quantity_Slew_Attribute => 2194,
- Iir_Kind_Ramp_Attribute => 2202,
- Iir_Kind_Zoh_Attribute => 2210,
- Iir_Kind_Ltf_Attribute => 2218,
- Iir_Kind_Ztf_Attribute => 2228,
- Iir_Kind_Dot_Attribute => 2235,
- Iir_Kind_Integ_Attribute => 2242,
- Iir_Kind_Quantity_Delayed_Attribute => 2250,
- Iir_Kind_Above_Attribute => 2258,
- Iir_Kind_Delayed_Attribute => 2267,
- Iir_Kind_Stable_Attribute => 2276,
- Iir_Kind_Quiet_Attribute => 2285,
- Iir_Kind_Transaction_Attribute => 2294,
- Iir_Kind_Event_Attribute => 2298,
- Iir_Kind_Active_Attribute => 2302,
- Iir_Kind_Last_Event_Attribute => 2306,
- Iir_Kind_Last_Active_Attribute => 2310,
- Iir_Kind_Last_Value_Attribute => 2314,
- Iir_Kind_Driving_Attribute => 2318,
- Iir_Kind_Driving_Value_Attribute => 2322,
- Iir_Kind_Behavior_Attribute => 2322,
- Iir_Kind_Structure_Attribute => 2322,
- Iir_Kind_Simple_Name_Attribute => 2329,
- Iir_Kind_Instance_Name_Attribute => 2334,
- Iir_Kind_Path_Name_Attribute => 2339,
- Iir_Kind_Left_Array_Attribute => 2346,
- Iir_Kind_Right_Array_Attribute => 2353,
- Iir_Kind_High_Array_Attribute => 2360,
- Iir_Kind_Low_Array_Attribute => 2367,
- Iir_Kind_Length_Array_Attribute => 2374,
- Iir_Kind_Ascending_Array_Attribute => 2381,
- Iir_Kind_Range_Array_Attribute => 2388,
- Iir_Kind_Reverse_Range_Array_Attribute => 2395,
- Iir_Kind_Attribute_Name => 2404
+ Iir_Kind_Aggregate => 1464,
+ Iir_Kind_Parenthesis_Expression => 1467,
+ Iir_Kind_Qualified_Expression => 1471,
+ Iir_Kind_Type_Conversion => 1476,
+ Iir_Kind_Allocator_By_Expression => 1481,
+ Iir_Kind_Allocator_By_Subtype => 1487,
+ Iir_Kind_Selected_Element => 1495,
+ Iir_Kind_Dereference => 1500,
+ Iir_Kind_Implicit_Dereference => 1505,
+ Iir_Kind_Slice_Name => 1512,
+ Iir_Kind_Indexed_Name => 1518,
+ Iir_Kind_Psl_Prev => 1524,
+ Iir_Kind_Psl_Stable => 1529,
+ Iir_Kind_Psl_Rose => 1534,
+ Iir_Kind_Psl_Fell => 1539,
+ Iir_Kind_Psl_Onehot => 1542,
+ Iir_Kind_Psl_Onehot0 => 1545,
+ Iir_Kind_Psl_Expression => 1547,
+ Iir_Kind_Sensitized_Process_Statement => 1569,
+ Iir_Kind_Process_Statement => 1590,
+ Iir_Kind_Concurrent_Simple_Signal_Assignment => 1603,
+ Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1616,
+ Iir_Kind_Concurrent_Selected_Signal_Assignment => 1630,
+ Iir_Kind_Concurrent_Assertion_Statement => 1638,
+ Iir_Kind_Concurrent_Procedure_Call_Statement => 1645,
+ Iir_Kind_Concurrent_Break_Statement => 1653,
+ Iir_Kind_Psl_Assert_Directive => 1667,
+ Iir_Kind_Psl_Assume_Directive => 1679,
+ Iir_Kind_Psl_Cover_Directive => 1691,
+ Iir_Kind_Psl_Restrict_Directive => 1702,
+ Iir_Kind_Block_Statement => 1716,
+ Iir_Kind_If_Generate_Statement => 1727,
+ Iir_Kind_Case_Generate_Statement => 1736,
+ Iir_Kind_For_Generate_Statement => 1745,
+ Iir_Kind_Component_Instantiation_Statement => 1756,
+ Iir_Kind_Psl_Default_Clock => 1759,
+ Iir_Kind_Generate_Statement_Body => 1770,
+ Iir_Kind_If_Generate_Else_Clause => 1776,
+ Iir_Kind_Simple_Simultaneous_Statement => 1783,
+ Iir_Kind_Simultaneous_Null_Statement => 1787,
+ Iir_Kind_Simultaneous_Procedural_Statement => 1798,
+ Iir_Kind_Simultaneous_Case_Statement => 1807,
+ Iir_Kind_Simultaneous_If_Statement => 1816,
+ Iir_Kind_Simultaneous_Elsif => 1822,
+ Iir_Kind_Simple_Signal_Assignment_Statement => 1833,
+ Iir_Kind_Conditional_Signal_Assignment_Statement => 1844,
+ Iir_Kind_Selected_Waveform_Assignment_Statement => 1856,
+ Iir_Kind_Signal_Force_Assignment_Statement => 1866,
+ Iir_Kind_Signal_Release_Assignment_Statement => 1875,
+ Iir_Kind_Null_Statement => 1879,
+ Iir_Kind_Assertion_Statement => 1886,
+ Iir_Kind_Report_Statement => 1892,
+ Iir_Kind_Wait_Statement => 1900,
+ Iir_Kind_Variable_Assignment_Statement => 1907,
+ Iir_Kind_Conditional_Variable_Assignment_Statement => 1914,
+ Iir_Kind_Return_Statement => 1920,
+ Iir_Kind_For_Loop_Statement => 1931,
+ Iir_Kind_While_Loop_Statement => 1942,
+ Iir_Kind_Next_Statement => 1949,
+ Iir_Kind_Exit_Statement => 1956,
+ Iir_Kind_Case_Statement => 1965,
+ Iir_Kind_Procedure_Call_Statement => 1971,
+ Iir_Kind_Break_Statement => 1978,
+ Iir_Kind_If_Statement => 1988,
+ Iir_Kind_Suspend_State_Statement => 1992,
+ Iir_Kind_Elsif => 1998,
+ Iir_Kind_Character_Literal => 2005,
+ Iir_Kind_Simple_Name => 2012,
+ Iir_Kind_Selected_Name => 2020,
+ Iir_Kind_Operator_Symbol => 2025,
+ Iir_Kind_Reference_Name => 2030,
+ Iir_Kind_External_Constant_Name => 2039,
+ Iir_Kind_External_Signal_Name => 2048,
+ Iir_Kind_External_Variable_Name => 2058,
+ Iir_Kind_Selected_By_All_Name => 2064,
+ Iir_Kind_Parenthesis_Name => 2069,
+ Iir_Kind_Package_Pathname => 2073,
+ Iir_Kind_Absolute_Pathname => 2074,
+ Iir_Kind_Relative_Pathname => 2075,
+ Iir_Kind_Pathname_Element => 2080,
+ Iir_Kind_Base_Attribute => 2082,
+ Iir_Kind_Subtype_Attribute => 2087,
+ Iir_Kind_Element_Attribute => 2092,
+ Iir_Kind_Across_Attribute => 2097,
+ Iir_Kind_Through_Attribute => 2102,
+ Iir_Kind_Nature_Reference_Attribute => 2106,
+ Iir_Kind_Left_Type_Attribute => 2111,
+ Iir_Kind_Right_Type_Attribute => 2116,
+ Iir_Kind_High_Type_Attribute => 2121,
+ Iir_Kind_Low_Type_Attribute => 2126,
+ Iir_Kind_Ascending_Type_Attribute => 2131,
+ Iir_Kind_Image_Attribute => 2137,
+ Iir_Kind_Value_Attribute => 2143,
+ Iir_Kind_Pos_Attribute => 2149,
+ Iir_Kind_Val_Attribute => 2155,
+ Iir_Kind_Succ_Attribute => 2161,
+ Iir_Kind_Pred_Attribute => 2167,
+ Iir_Kind_Leftof_Attribute => 2173,
+ Iir_Kind_Rightof_Attribute => 2179,
+ Iir_Kind_Signal_Slew_Attribute => 2187,
+ Iir_Kind_Quantity_Slew_Attribute => 2195,
+ Iir_Kind_Ramp_Attribute => 2203,
+ Iir_Kind_Zoh_Attribute => 2211,
+ Iir_Kind_Ltf_Attribute => 2219,
+ Iir_Kind_Ztf_Attribute => 2229,
+ Iir_Kind_Dot_Attribute => 2236,
+ Iir_Kind_Integ_Attribute => 2243,
+ Iir_Kind_Quantity_Delayed_Attribute => 2251,
+ Iir_Kind_Above_Attribute => 2259,
+ Iir_Kind_Delayed_Attribute => 2268,
+ Iir_Kind_Stable_Attribute => 2277,
+ Iir_Kind_Quiet_Attribute => 2286,
+ Iir_Kind_Transaction_Attribute => 2295,
+ Iir_Kind_Event_Attribute => 2299,
+ Iir_Kind_Active_Attribute => 2303,
+ Iir_Kind_Last_Event_Attribute => 2307,
+ Iir_Kind_Last_Active_Attribute => 2311,
+ Iir_Kind_Last_Value_Attribute => 2315,
+ Iir_Kind_Driving_Attribute => 2319,
+ Iir_Kind_Driving_Value_Attribute => 2323,
+ Iir_Kind_Behavior_Attribute => 2323,
+ Iir_Kind_Structure_Attribute => 2323,
+ Iir_Kind_Simple_Name_Attribute => 2330,
+ Iir_Kind_Instance_Name_Attribute => 2335,
+ Iir_Kind_Path_Name_Attribute => 2340,
+ Iir_Kind_Left_Array_Attribute => 2347,
+ Iir_Kind_Right_Array_Attribute => 2354,
+ Iir_Kind_High_Array_Attribute => 2361,
+ Iir_Kind_Low_Array_Attribute => 2368,
+ Iir_Kind_Length_Array_Attribute => 2375,
+ Iir_Kind_Ascending_Array_Attribute => 2382,
+ Iir_Kind_Range_Array_Attribute => 2389,
+ Iir_Kind_Reverse_Range_Array_Attribute => 2396,
+ Iir_Kind_Attribute_Name => 2405
);
function Get_Fields_First (K : Iir_Kind) return Fields_Index is
@@ -5776,6 +5782,8 @@ package body Vhdl.Nodes_Meta is
return Get_Aggr_Named_Flag (N);
when Field_Aggregate_Expand_Flag =>
return Get_Aggregate_Expand_Flag (N);
+ when Field_Determined_Aggregate_Flag =>
+ return Get_Determined_Aggregate_Flag (N);
when Field_Matching_Flag =>
return Get_Matching_Flag (N);
when Field_Has_Disconnect_Flag =>
@@ -5936,6 +5944,8 @@ package body Vhdl.Nodes_Meta is
Set_Aggr_Named_Flag (N, V);
when Field_Aggregate_Expand_Flag =>
Set_Aggregate_Expand_Flag (N, V);
+ when Field_Determined_Aggregate_Flag =>
+ Set_Determined_Aggregate_Flag (N, V);
when Field_Matching_Flag =>
Set_Matching_Flag (N, V);
when Field_Has_Disconnect_Flag =>
@@ -12026,6 +12036,11 @@ package body Vhdl.Nodes_Meta is
return K = Iir_Kind_Aggregate;
end Has_Aggregate_Expand_Flag;
+ function Has_Determined_Aggregate_Flag (K : Iir_Kind) return Boolean is
+ begin
+ return K = Iir_Kind_Aggregate;
+ end Has_Determined_Aggregate_Flag;
+
function Has_Association_Choices_Chain (K : Iir_Kind) return Boolean is
begin
return K = Iir_Kind_Aggregate;
diff --git a/src/vhdl/vhdl-nodes_meta.ads b/src/vhdl/vhdl-nodes_meta.ads
index 940f6d8fb..9d18dcb2d 100644
--- a/src/vhdl/vhdl-nodes_meta.ads
+++ b/src/vhdl/vhdl-nodes_meta.ads
@@ -379,6 +379,7 @@ package Vhdl.Nodes_Meta is
Field_Aggr_Others_Flag,
Field_Aggr_Named_Flag,
Field_Aggregate_Expand_Flag,
+ Field_Determined_Aggregate_Flag,
Field_Association_Choices_Chain,
Field_Case_Statement_Alternative_Chain,
Field_Matching_Flag,
@@ -979,6 +980,7 @@ package Vhdl.Nodes_Meta is
function Has_Aggr_Others_Flag (K : Iir_Kind) return Boolean;
function Has_Aggr_Named_Flag (K : Iir_Kind) return Boolean;
function Has_Aggregate_Expand_Flag (K : Iir_Kind) return Boolean;
+ function Has_Determined_Aggregate_Flag (K : Iir_Kind) return Boolean;
function Has_Association_Choices_Chain (K : Iir_Kind) return Boolean;
function Has_Case_Statement_Alternative_Chain (K : Iir_Kind)
return Boolean;
diff --git a/src/vhdl/vhdl-sem_expr.adb b/src/vhdl/vhdl-sem_expr.adb
index d4a8ef84e..2c9bd8645 100644
--- a/src/vhdl/vhdl-sem_expr.adb
+++ b/src/vhdl/vhdl-sem_expr.adb
@@ -3887,6 +3887,7 @@ package body Vhdl.Sem_Expr is
Sub_Aggr := Get_Associated_Expr (Choice);
case Get_Kind (Sub_Aggr) is
when Iir_Kind_Aggregate =>
+ Set_Determined_Aggregate_Flag (Sub_Aggr, Constrained);
Sem_Array_Aggregate_1
(Sub_Aggr, A_Type, Infos, Constrained, Dim + 1);
if not Get_Aggregate_Expand_Flag (Sub_Aggr) then
@@ -4405,6 +4406,8 @@ package body Vhdl.Sem_Expr is
Set_Expr_Staticness (Expr, Globally);
end if;
+ Set_Determined_Aggregate_Flag (Expr, Constrained);
+
Set_Type (Expr, A_Type); -- FIXME: should free old type
case Get_Kind (A_Type) is
when Iir_Kind_Array_Subtype_Definition =>