osate / osate2

Open Source AADL2 Tool Environment
http://osate.org
Eclipse Public License 2.0
36 stars 8 forks source link

connection between data and a subcomponent inside an other data #251

Closed sma350 closed 11 years ago

sma350 commented 11 years ago

Dear all,

I try to make a connection "data access" between the data "p1" inside a thread "the_sender" and a subcomponent "p1_queue" inside an other data "globalQueue_the_receiver".

Here is my AADL model:

thread proc_the_sender features p1 : requires data access Base_Types::Integer; end proc_the_sender;

thread implementation proc_the_sender.impl calls call_sequence_sender: { call_entrypoint: subprogram proc_the_sendercall_seq.impl; } ; connections p1_accessCnx_call_seq: data access p1 -> call_entrypoint.p1; end proc_the_sender.impl;

data Global_Queue_proc_the_receiver end Global_Queue_proc_the_receiver;

data implementation Global_Queue_proc_the_receiver.impl subcomponents p1_queue: data base_types::Integer; end Global_Queue_proc_the_receiver.impl;

process proc end proc;

process implementation proc.impl subcomponents globalQueue_the_receiver : data Global_Queue_proc_the_receiver.impl;

the_sender: thread proc_the_sender.impl { Compute_Entrypoint_Call_Sequence => reference(call_sequence_sender); Dispatch_Protocol => Periodic; Compute_Execution_time => 0 ms .. 1 Ms; Priority => 5; Period => 100 Ms; Deadline => 100 Ms; };

connections Id_instance_to_the_sender_p1 : data access the_sender.p1 -> globalQueue_the_receiver.p1_queue; end proc.impl;

I get an error at the connection "Id_instance_to_the_sender_p1: data access the_sender.p1 -> globalQueue_the_receiver.p1_queue;" OSATE can not verify this connection, the error output is as follows: parser error: in the AADL file . (from OSATE) Could not resolve reference to ConnectionEnd 'p1_queue'. Model has errors: rma--.aadl The destination of a data access connection must be a data access feature or a data subcomponent.

I think this is a bug in Osate can you confirm me and help me to solve my problem, thanks for your feedback and excuse me for my english.

Smail.

juli1 commented 11 years ago

Hello,

Is it possible to send the complete model so that we can reproduce the bug and try to instantiate it ? Thanks,

sma350 commented 11 years ago

hello,

thank you for your reply, my main model is rma-- :

package test_ravenscar_refined

public with Data_Model,Base_Types,ravenscar_runtime;


-- Data -------

data Global_Queue_proc_the_receiver extends ravenscar_runtime::Global_Queue end Global_Queue_proc_the_receiver;

data implementation Global_Queue_proc_the_receiver.impl subcomponents p1_queue: data base_types::Integer; end Global_Queue_proc_the_receiver.impl;

data Global_Queue_proc_the_receiver_2 extends ravenscar_runtime::Global_Queue end Global_Queue_proc_the_receiver_2;

data implementation Global_Queue_proc_the_receiver_2.impl subcomponents p2_queue: data base_types::Integer; end Global_Queue_proc_the_receiver_2.impl;


-- Processor --

processor cpurm end cpurm;

processor implementation cpurm.impl end cpurm.impl;


-- Processes --

process proc end proc;

process implementation proc.impl subcomponents globalQueue_the_receiver : data Global_Queue_proc_the_receiver.impl; globalQueue_the_receiver_2 : data Global_Queue_proc_the_receiver_2; e_globalVariable: data Base_Types::Integer; e_globalVariable_2: data Base_Types::Integer;

the_sender: thread proc_the_sender.impl { Compute_Entrypoint_Call_Sequence => reference(call_sequence_sender); Dispatch_Protocol => Periodic; Compute_Execution_time => 0 ms .. 1 Ms; Priority => 5; Period => 100 Ms; Deadline => 100 Ms; Source_Data_Size => 40000 Bytes; Source_Stack_Size => 40000 Bytes; Source_Code_Size => 40 Bytes; };

the_sender_2: thread proc_the_sender_2.impl { Compute_Entrypoint_Call_Sequence => reference(call_sequence_sender_2); Dispatch_Protocol => Periodic; Compute_Execution_time => 0 ms .. 1 Ms; Priority => 7; Period => 300 Ms; Deadline => 300 Ms; Source_Data_Size => 40000 Bytes; Source_Stack_Size => 40000 Bytes; Source_Code_Size => 40 Bytes; };

the_receiver: thread proc_the_receiver.impl { Compute_Entrypoint_Call_Sequence => reference(call_sequence_receiver); Dispatch_Protocol => Sporadic; Compute_Execution_time => 0 ms .. 1 Ms; Priority => 10; Period => 200 Ms; Deadline => 200 Ms; Source_Data_Size => 40000 Bytes; Source_Stack_Size => 40000 Bytes; Source_Code_Size => 40 Bytes; };

the_receiver_2: thread proc_the_receiver_2.impl { Compute_Entrypoint_Call_Sequence => reference(call_sequence_receiver_2); Dispatch_Protocol => Sporadic; Compute_Execution_time => 0 ms .. 1 Ms; Priority => 15; Period => 400 Ms; Deadline => 400 Ms; Source_Data_Size => 40000 Bytes; Source_Stack_Size => 40000 Bytes; Source_Code_Size => 40 Bytes; };

connections -- First global Queue Id_instance_to_the_sender_p1 : data access the_sender.p1 -> globalQueue_the_receiver.p1_queue; Id_instance_to_the_sender2_p2_3 : data access the_sender_2.p2_3 -> globalQueue_the_receiver.p1_queue; Id_instance_to_the_receiver_p3 : data access the_receiver.P3 -> globalQueue_the_receiver.p1_queue; -- second global Queue Id_instance_to_the_sender2_p2_4 : data access the_sender_2.p2_4 -> globalQueue_the_receiver_2.p2_queue; Id_instance_to_the_receiver_p3_2 : data access the_receiver_2.P4 -> globalQueue_the_receiver_2.p2_queue; -- Event Receiver --Id_instance_to_the_sender_event_E1 : access the_sender.E1 -> e_globalVariable; --Id_instance_to_the_sender_2_event_E2_3 : access the_sender_2.E2_3 -> e_globalVariable; --Id_instance_to_the_receiver_event_E3 : access the_receiver.E3 -> e_globalVariable; -- Event Receiver 2 --Id_instance_to_the_sender_2_event_E2_4 : access the_sender_2.E2_4 -> e_globalVariable_2; --Id_instance_to_the_receiver_2_event_E4 : access the_receiver_2.E4 -> e_globalVariable_2;

end proc.impl;

memory mem end mem;

memory implementation mem.impl end mem.impl;


-- System ---------

system rma end rma;

system implementation rma.impl subcomponents mem: memory mem.impl { Byte_Count => 80000; }; proc_a : process proc.impl; cpu_rm : processor cpurm.impl { Scheduling_Protocol => (RATE_MONOTONIC_PROTOCOL); }; properties Actual_Processor_Binding => (reference (cpu_rm)) applies to proc_a; Actual_memory_binding => (reference (mem)) applies to proc_a; Actual_Processor_Binding => (reference (cpu_rm)) applies to proc_a.the_sender; Actual_memory_binding => (reference (mem)) applies to proc_a.the_sender; Actual_Processor_Binding => (reference (cpu_rm)) applies to proc_a.the_sender_2; Actual_memory_binding => (reference (mem)) applies to proc_a.the_sender_2; Actual_Processor_Binding => (reference (cpu_rm)) applies to proc_a.the_receiver; Actual_memory_binding => (reference (mem)) applies to proc_a.the_receiver; Actual_Processor_Binding => (reference (cpu_rm)) applies to proc_a.the_receiver_2; Actual_memory_binding => (reference (mem)) applies to proc_a.the_receiver_2; end rma.impl;


-- Subprograms --

subprogram proc_the_sendercall_seq features p1: requires data access Base_Types::Integer; globalQueue : requires data access ravenscar_runtime::Global_Queue; end proc_the_sendercall_seq;

-- subprogram Send_Output_P1 -- extends ravenscar_runtime::Send_Output -- features -- Port_Type: refined to in out parameter ravenscar_runtime::Port_Type; -- end Send_Output_P1; -- Port_Type : requires data access data_type; -- Time_Stamp : in parameter Time_Stamp;

subprogram Store_Out_p1 extends ravenscar_runtime::Store_Out features Port_Type : refined to requires data access Base_Types::Integer; -- Time_Stamp : refined to in parameter ravenscar_runtime::Time_Stamp;
end Store_Out_p1;

subprogram implementation proc_the_sendercall_seq.impl subcomponents Time_Stamp : data ravenscar_runtime::Time_Stamp; Entity_Type : data ravenscar_runtime::Entity_Type; annex behavior_specification {** -- states BA_entrypoint_call_seq : initial final state ; transitions BA_entrypoint_call_seq -[]-> BA_entrypoint_call_seq { rma::sender_spg ! (p1); globalQueue.Store_Out(p1,Time_Stamp); Send_Output_P1 ! (p1); Periodic_Wait_P ! (p1);
};

**}; end proc_the_sendercall_seq.impl;

subprogram proc_the_sender_2_call_seq features p2_3: requires data access Base_Types::Integer; p2_4: requires data access Base_Types::Integer; end proc_the_sender_2_call_seq;

subprogram implementation proc_the_sender_2_call_seq.impl subcomponents Time_Stamp : data ravenscar_runtime::Time_Stamp; Entity_Type : data ravenscar_runtime::Entity_Type; annex behavior_specification {** -- states BA_entrypoint_call_seq : initial final state ; transitions

BA_entrypoint_call_seq -[]-> BA_entrypoint_call_seq { rma::sender_spg_2 ! (p2_3); rma::sender_spg_2 ! (p2_4);

globalQueue.Store_Out(p2_3,Time_Stamp); --mettre la valeur du port p2 dans le tableau Global_q
Send_Output_P2_3 ! (p2_3); -- envoie de la valeur en sortie 'OUT'
Periodic_Wait_P ! (p2_3);    

globalQueue.Store_Out_P1(p2_4,Time_Stamp); --mettre la valeur du port p2 dans le tableau Global_q
Send_Output_P2_4 ! (p2_4); -- envoie de la valeur en sortie 'OUT'
Periodic_Wait_P ! (p2_4);

}; **};

end proc_the_sender_2_call_seq.impl;

subprogram proc_the_receivercall features p3: requires data access Base_Types::Integer; end proc_the_receivercall;

subprogram implementation proc_the_receivercall.impl -- subcomponents annex behavior_specification { -- states BA_entrypoint_call : initial final state ; transitions
BA_entrypoint_call -[]-> BA_entrypoint_call { globalQueue.Wait_Event(p3); -- Lecture d'un évenement, globalQueue.Next_Value(p3) ; -- dequeue + passer a la prochaine valeur rma::receiver_spg ! (globalQueue.Read_Out(p3);)} ; Send_Output_P2_3 ! (p2_3); -- envoie de la valeur en sortie 'OUT' Sporadic_Wait_P ! (p2_3);
}; end proc_the_receivercall.impl;

subprogram proc_the_receiver_2_call features p4: requires data access Base_Types::Integer; end proc_the_receiver_2_call;

subprogram implementation proc_the_receiver_2_call.impl -- subcomponents annex behavior_specification { -- states BA_entrypoint_call : initial final state ; transitions
BA_entrypoint_call -[]-> BA_entrypoint_call { globalQueue_2.Wait_Event(p4); -- Lecture d'un évenement, globalQueue_2.Next_Value(p4) ; -- Dequeue one value from the IN port queue. rma::receiver_spg ! (globalQueue_2.Read_Out(p4);)} ; Send_Output_P2_4 ! (p2_4); -- envoie de la valeur en sortie 'OUT' Sporadic_Wait_P ! (p2_4);
}; end proc_the_receiver_2_call.impl;


----- subprograms ------

subprogram Send_Output_P1 extends ravenscar_runtime::Send_Output features Port_Type: refined to in out parameter ravenscar_runtime::Port_Type; end Send_Output_P1;

subprogram Send_Output_P2_3 extends ravenscar_runtime::Send_Output features Port_Type: refined to in out parameter ravenscar_runtime::Port_Type; end Send_Output_P2_3;

subprogram Send_Output_P2_4 extends ravenscar_runtime::Send_Output features Port_Type: refined to in out parameter ravenscar_runtime::Port_Type; end Send_Output_P2_4;

subprogram Periodic_Wait_P extends ravenscar_runtime::Periodic_Wait features Port_Type: refined to out parameter ravenscar_runtime::Port_Type; end Periodic_Wait_P;

subprogram Sporadic_Wait_P extends ravenscar_runtime::Sporadic_Wait features Port_Type: refined to out parameter ravenscar_runtime::Port_Type; end Sporadic_Wait_P;


-- Threads --

thread proc_the_sender features p1 : requires data access Base_Types::Integer; E1 : out event port {Queue_Size => 1;}; end proc_the_sender;

thread proc_the_sender_2 features p2_3 : requires data access Base_Types::Integer; p2_4 : requires data access Base_Types::Integer; E2_3 : out event port {Queue_Size => 1;}; E2_4 : out event port {Queue_Size => 1;}; end proc_the_sender_2;

thread proc_the_receiver features p3 : requires data access Base_Types::Integer; E3 : in event port {Queue_Size => 1;}; end proc_the_receiver;

thread proc_the_receiver_2 features p4 : requires data access Base_Types::Integer; E4 : in event port {Queue_Size => 1;}; end proc_the_receiver_2;


-- Threads Impl--

thread implementation proc_the_sender.impl calls call_sequence_sender: { call_entrypoint: subprogram proc_the_sendercall_seq.impl; } ; connections p1_accessCnx_call_seq: data access p1 -> call_entrypoint.p1; end proc_the_sender.impl;

thread implementation proc_the_sender_2.impl calls call_sequence_sender_2: { call_entrypoint: subprogram proc_the_sender_2_call_seq.impl; } ; connections p2_3_accessCnx_call_seq: data access p2_3 -> call_entrypoint.p2_3; p2_4_accessCnx_call_seq: data access p2_4 -> call_entrypoint.p2_4; end proc_the_sender_2.impl;

thread implementation proc_the_receiver.impl calls call_sequence_receiver: { call_entrypoint: subprogram proc_the_receivercall.impl; } ; connections p3_accessCnx_call: data access p3 -> call_entrypoint.p3; end proc_the_receiver.impl;

thread implementation proc_the_receiver_2.impl calls call_sequence_receiver_2: { call_entrypoint: subprogram proc_the_receiver_2_call.impl; } ; connections p4_accessCnx_call: data access p4 -> call_entrypoint.p4; end proc_the_receiver_2.impl;

end test_ravenscar_refined;

and I have a model that is included ravenscar_runtime.aadl :

package ravenscar_runtime public

with Data_Model, Base_Types;


--- Data ---------


data Port_Type properties Programming_Properties::Source_Name => "Port_Type"; Programming_Properties::Source_Text => ("ravenscar/types.ads"); end Port_Type;

data Error_Kind properties Programming_Properties::Source_Name => "Error_Kind"; Programming_Properties::Source_Text => ("ravenscar/types.ads"); end Error_Kind;

data Thread_Interface_Type properties Programming_Properties::Source_Name => "Thread_Interface_Type"; Programming_Properties::Source_Text => ("ravenscar/types.ads"); end Thread_Interface_Type;

data Entity_Type properties Programming_Properties::Source_Name => "Entity_Type"; Programming_Properties::Source_Text => ("ravenscar/types.ads"); end Entity_Type;

data Time_Stamp properties Programming_Properties::Source_Name => "Time"; Programming_Properties::Source_Text => ("ravenscar/types.ads"); end Time_Stamp;

data Port_Stream_Entry properties Programming_Properties::Source_Name => "Port_Stream_Entry"; Programming_Properties::Source_Text => ("ravenscar/types.ads"); end Port_Stream_Entry;

data Global_Queue features Wait_Event : provides subprogram access Wait_Event; Read_Event : provides subprogram access Read_Event; Dequeue : provides subprogram access Dequeue; Read_In : provides subprogram access Read_In; Read_Out : provides subprogram access Read_Out; Is_Invalid : provides subprogram access Is_Invalid; Set_Invalid : provides subprogram access Set_Invalid; Store_In : provides subprogram access Store_In; Store_Out : provides subprogram access Store_Out; Count : provides subprogram access Count; Get_Time_Stamp : provides subprogram access Get_Time_Stamp; properties programming_properties::source_name => "Global_Queue"; programming_properties::source_text => ("ravenscar/raven.adb"); end Global_Queue;

data implementation Global_Queue.Impl subcomponents Port_Type : data Port_Type; P : data Port_Stream_Entry;
properties Data_Model::Data_Representation => Struct; Concurrency_Control_Protocol => Priority_Ceiling; end Global_Queue.Impl;



--- Subprogram ---


subprogram Periodic_Wait features Port_Type: out parameter Port_Type ; properties Programming_Properties::Source_Name => "PERIODIC_WAIT"; Programming_Properties::Source_Text => ("ravenscar/raven.ads"); end Periodic_Wait;

subprogram Sporadic_Wait features Port_Type: out parameter Port_Type ; properties Programming_Properties::Source_Name => "SPORADIC_WAIT"; Programming_Properties::Source_Text => ("ravenscar/raven.ads"); end Sporadic_Wait;

subprogram Send_Output features Port_Type : in out parameter Port_Type; --Error : out parameter Error_Kind; properties programming_properties::source_name => "Send_Output"; programming_properties::source_text => ("ravenscar/raven.ads"); end Send_Output;

subprogram Put_Value features Thread_Interface : in parameter Thread_Interface_Type; properties programming_properties::source_name => "Put_Value"; programming_properties::source_text => ("ravenscar/raven.ads"); end Put_Value;

subprogram Receive_Input features Port_Type : in parameter Port_Type; properties programming_properties::source_name => "Receive_Input"; programming_properties::source_text => ("ravenscar/raven.ads"); end Receive_Input;

subprogram Get_Value features Port_Type : in parameter Port_Type; T_Port : out parameter Thread_Interface_Type; properties programming_properties::source_name => "Get_Value"; programming_properties::source_text => ("ravenscar/raven.ads"); end Get_Value;

subprogram Get_Sender features Port_Type : in parameter Port_Type; Sender : out parameter Entity_Type; properties programming_properties::source_name => "Get_Sender"; programming_properties::source_text => ("ravenscar/raven.ads"); end Get_Sender;

subprogram Get_Count features Port_Type : in parameter Port_Type; Counter : out parameter Base_Types::Integer; properties programming_properties::source_name => "Get_Count"; programming_properties::source_text => ("ravenscar/raven.ads"); end Get_Count;

subprogram Next_Value features Port_Type : in parameter Port_Type; properties programming_properties::source_name => "Next_Value"; programming_properties::source_text => ("ravenscar/raven.ads"); end Next_Value;

subprogram Wait_For_Incoming_Events features Port_Type : out parameter Port_Type; properties programming_properties::source_name => "Wait_For_Incoming_Events"; programming_properties::source_text => ("ravenscar/raven.ads"); end Wait_For_Incoming_Events;

subprogram Get_Next_Event features Port_Type : out parameter Port_Type; Valid : out parameter Base_Types::Boolean; properties programming_properties::source_name => "Get_Next_Event"; programming_properties::source_text => ("ravenscar/raven.ads"); end Get_Next_Event;

subprogram Store_Received_Message features Thread_Interface : in parameter Thread_Interface_Type; From : in parameter Entity_Type; Time_Stamp : in parameter Time_Stamp; properties programming_properties::source_name => "Store_Received_Message"; programming_properties::source_text => ("ravenscar/raven.ads"); end Store_Received_Message;

subprogram H_Increment_First features F : in out parameter Base_Types::Integer; properties programming_properties::source_name => "H_Increment_First"; programming_properties::source_text => ("ravenscar/raven.ads"); end H_Increment_First;

subprogram H_Increment_Last features L : in out parameter Base_Types::Integer; properties programming_properties::source_name => "H_Increment_Last"; programming_properties::source_text => ("ravenscar/raven.ads"); end H_Increment_Last;

subprogram CE properties programming_properties::source_name => "CE"; programming_properties::source_text => ("ravenscar/raven.ads"); end CE;

--- Global Queue procedure

subprogram Wait_Event prototypes data_type: data; features this : requires data access Global_Queue.Impl; Port_Type : in parameter data_type; properties programming_properties::source_name => "Wait_Event"; programming_properties::source_text => ("ravenscar/raven.adb"); end Wait_Event;

subprogram Read_Event prototypes data_type: data; features this : requires data access Global_Queue.Impl; Port_Type : out parameter data_type; properties programming_properties::source_name => "Read_Event"; programming_properties::source_text => ("ravenscar/raven.adb"); end Read_Event;

subprogram Dequeue prototypes data_type: data; features this : requires data access Global_Queue.Impl; Port_Type : requires data access data_type; Port_Stream_Entry : out parameter Port_Stream_Entry; properties programming_properties::source_name => "Dequeue"; programming_properties::source_text => ("ravenscar/raven.adb"); end Dequeue;

subprogram Read_In prototypes data_type: data; features this : requires data access Global_Queue.Impl; Port_Type : requires data access data_type; properties programming_properties::source_name => "Read_In"; programming_properties::source_text => ("ravenscar/raven.adb"); end Read_In;

subprogram Read_Out prototypes data_type: data; features this : requires data access Global_Queue.Impl; Port_Type : requires data access data_type; properties programming_properties::source_name => "Read_Out"; programming_properties::source_text => ("ravenscar/raven.adb"); end Read_Out;

subprogram Is_Invalid prototypes data_type: data; features this : requires data access Global_Queue.Impl; properties programming_properties::source_name => "Is_Invalid"; programming_properties::source_text => ("ravenscar/raven.adb"); end Is_Invalid;

subprogram Set_Invalid prototypes data_type: data; features this : requires data access Global_Queue.Impl; properties programming_properties::source_name => "Set_Invalid"; programming_properties::source_text => ("ravenscar/raven.adb"); end Set_Invalid;

subprogram Store_In prototypes data_type: data; features this : requires data access Global_Queue.Impl; Port_Type : requires data access data_type; Time_Stamp : in parameter Time_Stamp; properties programming_properties::source_name => "Store_In"; programming_properties::source_text => ("ravenscar/raven.adb"); end Store_In;

subprogram Store_Out prototypes data_type: data; features this : requires data access Global_Queue.Impl; Port_Type : requires data access data_type; Time_Stamp : in parameter Time_Stamp; properties programming_properties::source_name => "Store_Out"; programming_properties::source_text => ("ravenscar/raven.adb"); end Store_Out;

subprogram Count prototypes data_type: data; features Port_Type : requires data access data_type; this : requires data access Global_Queue.Impl; properties programming_properties::source_name => "Count"; programming_properties::source_text => ("ravenscar/raven.adb"); end Count;

subprogram Get_Time_Stamp prototypes data_type: data; features this : requires data access Global_Queue.Impl; Port_Type : requires data access data_type; properties programming_properties::source_name => "Get_Time_Stamp"; programming_properties::source_text => ("ravenscar/raven.adb"); end Get_Time_Stamp;

end ravenscar_runtime;

Thanks for your feedback.

Smail.

sma350 commented 11 years ago

hello,

thank you for your reply, my main model is rma-- and I have a model that is included ravenscar_runtime.aadl. Thanks for your feedback.

Smail.

2013/7/1 Julien notifications@github.com

Hello,

Is it possible to send the complete model so that we can reproduce the bug and try to instantiate it ? Thanks,

— Reply to this email directly or view it on GitHubhttps://github.com/osate/osate2-core/issues/251#issuecomment-20307291 .

reteprelief commented 11 years ago

There is an issue with the core standard in that it does currently not allow you to specify access to a “field” (data subcomponent) in a data component. I put an errata in to discuss the issue at the standard meeting next week.

We should either allow you to declare provides data access to indicate which “fields” are externally accessible. You can then refer to the data component and the “field” access.

Alternatively, we could allow you to refer to a data component and its subcomponent in data access connections. In this case, should we allow you to access multiple levels down? For example “fields” of “fields” (nested records), or a data subcomponent of a subcomponent . providesdataaccess? This would lead to a multiple dot path on the ends of connections.

Peter

From: sma350 [mailto:notifications@github.com] Sent: Tuesday, July 02, 2013 4:09 AM To: osate/osate2-core Subject: Re: [osate2-core] connection between data and a subcomponent inside an other data (#251)

hello,

thank you for your reply, my main model is rma-- and I have a model that is included ravenscar_runtime.aadl. Thanks for your feedback.

Smail.

2013/7/1 Julien notifications@github.com<mailto:notifications@github.com>

Hello,

Is it possible to send the complete model so that we can reproduce the bug and try to instantiate it ? Thanks,

— Reply to this email directly or view it on GitHubhttps://github.com/osate/osate2-core/issues/251#issuecomment-20307291 .

— Reply to this email directly or view it on GitHubhttps://github.com/osate/osate2-core/issues/251#issuecomment-20332277.

sma350 commented 11 years ago

Dear all,

I heared from Etienne there was a solution proposed during the AADL committe. Would it be possible to have the implementation of this solution in OSATE so that I can continue my work related to this language feature?

Thanks a lot! Smail.

reteprelief commented 11 years ago

I will take care of it within the next two days.

juli1 commented 11 years ago

Done.