Skip to content

Commit

Permalink
Fixat bug i addComponent
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@923 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Peter Aronsson committed Feb 27, 2003
1 parent b676ce0 commit 6dcbde2
Showing 1 changed file with 38 additions and 25 deletions.
63 changes: 38 additions & 25 deletions modeq/interactive.rml
Expand Up @@ -1070,32 +1070,63 @@ end
relation add_component: (string, Absyn.ComponentRef,Absyn.ComponentRef,Absyn.NamedArg list, Absyn.Program) => (Absyn.Program ,string) =

rule Absyn.cref_to_path(model) => modelpath &
path_in_program(modelpath,p) => false
not get_pathed_class_in_program(modelpath,p) => _
---------------------------------
add_component (name,tp,model,annlst,p) => (p,"Error, No such model\n")
add_component (name,tp,model,annlst,p) => (p,"Error, No such model\n")

(* Adding component to model that resides inside package *)
(* Without annotation*)
rule Absyn.cref_to_path(model) => modelpath &
Absyn.strip_last(modelpath) => modelwithin &
get_pathed_class_in_program(modelpath,p) => cdef &
Absyn.cref_to_path(tp) => tppath &
add_to_public(cdef,Absyn.ELEMENTITEM(Absyn.ELEMENT(false,false,Absyn.UNSPECIFIED,"",
Absyn.COMPONENTS(Absyn.ATTR(false,Absyn.VAR,Absyn.BIDIR,[]),tppath,
[Absyn.COMPONENTITEM(Absyn.COMPONENT(name,[],NONE),NONE)]),NONE))) => newcdef &
update_program(Absyn.PROGRAM([newcdef],w),p)=> newp
update_program(Absyn.PROGRAM([newcdef], Absyn.WITHIN(modelwithin)),p)=> newp
------------------------------------------------
add_component( name,tp,model,[],p as Absyn.PROGRAM(_,w)) => (newp,"Ok\n")
add_component( name,tp,model as Absyn.CREF_QUAL(_,_,_),[],p as Absyn.PROGRAM(_,w)) => (newp,"Ok\n")

(* Adding component to model that resides inside package *)
(* With annotation*)
rule Absyn.cref_to_path(model) => modelpath &
Absyn.strip_last(modelpath) => modelwithin &
get_pathed_class_in_program(modelpath,p) => cdef &
Absyn.cref_to_path(tp) => tppath &
annotation_list_to_absyn(annlst) => annotation &
add_to_public(cdef,Absyn.ELEMENTITEM(Absyn.ELEMENT(false, false, Absyn.UNSPECIFIED,"",
Absyn.COMPONENTS(Absyn.ATTR(false,Absyn.VAR,Absyn.BIDIR,[Absyn.NOSUB]),tppath,
[Absyn.COMPONENTITEM(Absyn.COMPONENT(name,[],NONE),SOME(Absyn.COMMENT(SOME(annotation),NONE)))]),NONE))) => newcdef &
update_program(Absyn.PROGRAM([newcdef],w),p)=> newp
update_program(Absyn.PROGRAM([newcdef], Absyn.WITHIN(modelwithin)),p)=> newp
------------------------------------------------
add_component( name,tp,model,annlst,p as Absyn.PROGRAM(_,w)) => (newp,"Ok\n")
add_component( name,tp,model as Absyn.CREF_QUAL(_,_,_),annlst,p as Absyn.PROGRAM(_,w)) => (newp,"Ok\n")

axiom add_component (_,_,_,_,p) => (p,"Not implemented yet\n")
(* Adding component to model that resides on top level *)
(* Without annotation*)
rule Absyn.cref_to_path(model) => modelpath &
get_pathed_class_in_program(modelpath,p) => cdef &
Absyn.cref_to_path(tp) => tppath &
add_to_public(cdef,Absyn.ELEMENTITEM(Absyn.ELEMENT(false,false,Absyn.UNSPECIFIED,"",
Absyn.COMPONENTS(Absyn.ATTR(false,Absyn.VAR,Absyn.BIDIR,[]),tppath,
[Absyn.COMPONENTITEM(Absyn.COMPONENT(name,[],NONE),NONE)]),NONE))) => newcdef &
update_program(Absyn.PROGRAM([newcdef], Absyn.TOP),p) => newp
------------------------------------------------
add_component( name,tp,model as Absyn.CREF_IDENT(_,_),[],p as Absyn.PROGRAM(_,w)) => (newp,"Ok\n")

(* Adding component to model that resides on top level *)
(* With annotation*)
rule Absyn.cref_to_path(model) => modelpath &
get_pathed_class_in_program(modelpath,p) => cdef &
Absyn.cref_to_path(tp) => tppath &
annotation_list_to_absyn(annlst) => annotation &
add_to_public(cdef,Absyn.ELEMENTITEM(Absyn.ELEMENT(false, false, Absyn.UNSPECIFIED,"",
Absyn.COMPONENTS(Absyn.ATTR(false,Absyn.VAR,Absyn.BIDIR,[Absyn.NOSUB]),tppath,
[Absyn.COMPONENTITEM(Absyn.COMPONENT(name,[],NONE),SOME(Absyn.COMMENT(SOME(annotation),NONE)))]),NONE))) => newcdef &
update_program(Absyn.PROGRAM([newcdef], Absyn.TOP),p)=> newp
------------------------------------------------
add_component( name,tp,model as Absyn.CREF_IDENT(_,_),annlst,p as Absyn.PROGRAM(_,w)) => (newp,"Ok\n")

axiom add_component (_,_,_,_,p) => (p,"add component Not implemented yet\n")

end

Expand Down Expand Up @@ -2467,24 +2498,6 @@ relation class_in_program:(string,Absyn.Program) => bool =
axiom class_in_program (_,_) => true
end

(** relation: path_in_program
** This relation takes a path and a program and returns true if the class
** referenced by the path exist in the program
*)
relation path_in_program: (Absyn.Path, Absyn.Program) => bool =

rule Absyn.path_string(path) => pathstr &
class_in_program(pathstr,p) => res
-----------------------------------
path_in_program (path as Absyn.IDENT(name),p) => res

rule class_in_program(c1,p) => true &
get_class_in_program(c1,p) => c1def &
path_in_program(prest,Absyn.PROGRAM([c1def],w)) => res
------------------------------------
path_in_program (path as Absyn.QUALIFIED(c1,prest),p as Absyn.PROGRAM(_,w)) => res
end

(** relation: get_pathed_class_in_program
** This relation takes a `Path' and a `Program` and retrieves the class definition referenced
** by the `Path' from the `Program'.
Expand Down

0 comments on commit 6dcbde2

Please sign in to comment.