Skip to content

Commit

Permalink
improved some error-msg
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@1841 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
x02lucpo committed Jul 5, 2005
1 parent 9398cc0 commit 7ff2e5e
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 71 deletions.
2 changes: 1 addition & 1 deletion Compiler/Inst.rml
Expand Up @@ -421,7 +421,7 @@ relation instantiate_class : (SCode.Program, SCode.Path) => (DAE.DAElist,Env.Env
=> (DAE.DAE([DAE.COMP(pathstr,DAE.DAE(dae))]),env'')


rule (*Debug.fprint("failtrace", "- instantiate_class failed\n")*)
rule Print.print_error_buf("# The instantiation of the model failed.")
------------
instantiate_class(_,_) => fail
end
Expand Down
165 changes: 99 additions & 66 deletions Compiler/Interactive.rml
Expand Up @@ -182,13 +182,20 @@ module Interactive:
relation get_component_modification: Absyn.Element => string

relation add_to_public: (Absyn.Class, Absyn.ElementItem) => Absyn.Class
relation traverse_classes: (Absyn.Program,
((Absyn.Class * 'a) => (Absyn.Class * 'a)), (* rel-ation to apply*)
'a, (* extra value passed to re-lation*)
bool) (* true = traverse protected elements*)
=> (Absyn.Program* 'a)

relation traverse_classes: (Absyn.Program,
Absyn.Path option,
((Absyn.Class * Absyn.Path option * 'a) => (Absyn.Class * Absyn.Path option * 'a)), (* rel-ation to apply*)
'a, (* extra value passed to re-lation*)
bool) (* true = traverse protected elements*)
=> (Absyn.Program * Absyn.Path option * 'a)


relation is_package: (Absyn.ComponentRef, Absyn.Program) => bool

relation get_top_classnames_in_program: Absyn.Program => string list


end


Expand Down Expand Up @@ -2087,8 +2094,8 @@ relation rename_class: (Absyn.Program,

rule (* class in package *)
Absyn.cref_to_path(old_class) => old_path &
traverse_classes(p,rename_class_visitor,(old_path,new_name),
true (* traverse protected*)) => ((p',_))
traverse_classes(p,NONE,rename_class_visitor,(old_path,new_name),
true (* traverse protected*)) => ((p',_,_))
------------------------
rename_class(p,old_class as Absyn.CREF_QUAL(_,_,_),Absyn.CREF_IDENT(new_name,_))
=> p'
Expand All @@ -2098,16 +2105,16 @@ end
** This visitor renames a class given a new name
**)

relation rename_class_visitor: ((Absyn.Class* (Absyn.Path*string)))
=> ((Absyn.Class*(Absyn.Path*string))) =
relation rename_class_visitor: ((Absyn.Class* Absyn.Path option *(Absyn.Path*string)))
=> ((Absyn.Class*Absyn.Path option *(Absyn.Path*string))) =

rule Absyn.path_last_ident(old_class) => id2 &
id = id2
----------------
rename_class_visitor((Absyn.CLASS(id,a,b,c,d,e,f),(old_class,new_name)))
=> ((Absyn.CLASS(new_name,a,b,c,d,e,f),(old_class,new_name)))
rename_class_visitor((Absyn.CLASS(id,a,b,c,d,e,f),pa,(old_class,new_name)))
=> ((Absyn.CLASS(new_name,a,b,c,d,e,f),pa,(old_class,new_name)))

axiom rename_class_visitor((class,args)) => ((class,args))
axiom rename_class_visitor((class,pa,args)) => ((class,pa,args))

end

Expand All @@ -2118,38 +2125,40 @@ end
** an updated class and the additional values.
**)
relation traverse_classes: (Absyn.Program,
((Absyn.Class * 'a) => (Absyn.Class * 'a)), (* rel-ation to apply*)
Absyn.Path option,
((Absyn.Class * Absyn.Path option * 'a) => (Absyn.Class * Absyn.Path option * 'a)), (* rel-ation to apply*)
'a, (* extra value passed to re-lation*)
bool) (* true = traverse protected elements*)
=> (Absyn.Program* 'a) =
=> (Absyn.Program * Absyn.Path option * 'a) =

rule traverse_classes2(lst,visitor,args,traverse_prot) => ((lst',args'))
rule traverse_classes2(lst,pa,visitor,args,traverse_prot) => ((lst',pa',args'))
-------------------------------------------------------------------------
traverse_classes(Absyn.PROGRAM(lst,within),visitor,args,traverse_prot)
=> ((Absyn.PROGRAM(lst',within),args'))
traverse_classes(Absyn.PROGRAM(lst,within),pa,visitor,args,traverse_prot)
=> ((Absyn.PROGRAM(lst',within),pa',args'))
end

(** relation: traverse_classes2
** Helper relation to traverse_classes.
**)
relation traverse_classes2:(Absyn.Class list,
((Absyn.Class * 'a) => (Absyn.Class * 'a)), (* rel-ation to apply*)
Absyn.Path option,
((Absyn.Class * Absyn.Path option * 'a) => (Absyn.Class * Absyn.Path option *'a)), (* rel-ation to apply*)
'a, (* extra value passed to re-lation*)
bool) (* true = traverse protected elements*)
=> (Absyn.Class list * 'a) =
=> (Absyn.Class list * Absyn.Path option * 'a) =

axiom traverse_classes2([],_,args,_) => (([],args))
axiom traverse_classes2([],pa,visitor,args,_) => (([],pa,args))

rule visitor((class,args)) => ((class',args')) &
traverse_inner_class(class,visitor,args',traverse_prot) => ((class'',args'')) &
traverse_classes2(classes,visitor,args'',traverse_prot) => ((classes',args'''))
rule visitor((class,pa,args)) => ((class',pa',args')) &
traverse_inner_class(class,pa,visitor,args',traverse_prot) => ((class'',pa'',args'')) &
traverse_classes2(classes,pa,visitor,args'',traverse_prot) => ((classes',pa''',args'''))
------------------------
traverse_classes2(class::classes,visitor,args,traverse_prot)
=> ((class''::classes',args'''))
traverse_classes2(class::classes,pa,visitor,args,traverse_prot)
=> ((class''::classes',pa''',args'''))

rule print "-traverse_classes2 failed\n"
---------------------
traverse_classes2(_,_,_,_) => fail
traverse_classes2(_,_,_,_,_) => fail
end

(** relation: traverse_inner_class
Expand All @@ -2158,19 +2167,31 @@ end
**)

relation traverse_inner_class:(Absyn.Class, (* class to traverse inner classes in *)
((Absyn.Class * 'a) => (Absyn.Class * 'a)), (* visitor rlation*)
Absyn.Path option,
((Absyn.Class * Absyn.Path option * 'a) => (Absyn.Class * Absyn.Path option *'a)), (* visitor rlation*)
'a (* extra argument *),
bool ) (* true = traverse protected elts *)
=> (Absyn.Class * 'a) =
=> (Absyn.Class * Absyn.Path option * 'a) =


rule traverse_inner_class_parts(parts,visitor,args,visit_prot) => ((parts',args'))
rule Absyn.join_paths(pa,Absyn.IDENT(name)) => tmp_pa &
traverse_inner_class_parts(parts,SOME(tmp_pa),visitor,args,visit_prot) => ((parts',pa',args'))
--------------------------------------------------------------
traverse_inner_class(Absyn.CLASS(name,p,f,e,r,Absyn.PARTS(parts,str_opt),file),SOME(pa),visitor,args,visit_prot)
=> ((Absyn.CLASS(name,p,f,e,r,Absyn.PARTS(parts',str_opt),file),pa',args'))

rule traverse_inner_class_parts(parts,SOME(Absyn.IDENT(name)),visitor,args,visit_prot) => ((parts',pa',args'))
--------------------------------------------------------------
traverse_inner_class(Absyn.CLASS(name,p,f,e,r,Absyn.PARTS(parts,str_opt),file),NONE,visitor,args,visit_prot)
=> ((Absyn.CLASS(name,p,f,e,r,Absyn.PARTS(parts',str_opt),file),pa',args'))

rule traverse_inner_class_parts(parts,pa,visitor,args,visit_prot) => ((parts',pa',args'))

--------------------------------------------------------------
traverse_inner_class(Absyn.CLASS(name,p,f,e,r,Absyn.PARTS(parts,str_opt),file),visitor,args,visit_prot)
=> ((Absyn.CLASS(name,p,f,e,r,Absyn.PARTS(parts',str_opt),file),args'))
traverse_inner_class(Absyn.CLASS(name,p,f,e,r,Absyn.PARTS(parts,str_opt),file),pa,visitor,args,visit_prot)
=> ((Absyn.CLASS(name,p,f,e,r,Absyn.PARTS(parts',str_opt),file),pa',args'))

axiom traverse_inner_class(cl,_,args,_) => ((cl,args))
axiom traverse_inner_class(cl,pa,_,args,_) => ((cl,pa,args))

end

Expand All @@ -2179,75 +2200,79 @@ end
**)

relation traverse_inner_class_parts: (Absyn.ClassPart list,
((Absyn.Class * 'a) => (Absyn.Class * 'a)), (* visitor*)
Absyn.Path option,
((Absyn.Class * Absyn.Path option * 'a) => (Absyn.Class * Absyn.Path option *'a)), (* visitor*)
'a,
bool) (* true = visit protected elements*)
=> (Absyn.ClassPart list * 'a) =
=> (Absyn.ClassPart list * Absyn.Path option * 'a) =

axiom traverse_inner_class_parts([],_,args,_) => (([],args))
axiom traverse_inner_class_parts([],pa,_,args,_) => (([],pa,args))

rule traverse_inner_class_elements(elts,visitor,args,visit_prot) => ((elts',args')) &
traverse_inner_class_parts(parts,visitor,args',visit_prot) => ((parts',args''))
rule traverse_inner_class_elements(elts,pa,visitor,args,visit_prot) => ((elts',pa',args')) &
traverse_inner_class_parts(parts,pa,visitor,args',visit_prot) => ((parts',pa'',args''))
------------------------------------------------------------------
traverse_inner_class_parts(Absyn.PUBLIC(elts)::parts,visitor,args,visit_prot)
=> ((Absyn.PUBLIC(elts')::parts',args''))
traverse_inner_class_parts(Absyn.PUBLIC(elts)::parts,pa,visitor,args,visit_prot)
=> ((Absyn.PUBLIC(elts')::parts',pa'',args''))

rule traverse_inner_class_elements(elts,visitor,args,true) => ((elts',args')) &
traverse_inner_class_parts(parts,visitor,args',true) => ((parts',args''))
rule traverse_inner_class_elements(elts,pa,visitor,args,true) => ((elts',pa',args')) &
traverse_inner_class_parts(parts,pa,visitor,args',true) => ((parts',pa'',args''))
------------------------------------------------------------------
traverse_inner_class_parts(Absyn.PROTECTED(elts)::parts,visitor,args,true)
=> ((Absyn.PROTECTED(elts')::parts',args''))
traverse_inner_class_parts(Absyn.PROTECTED(elts)::parts,pa,visitor,args,true)
=> ((Absyn.PROTECTED(elts')::parts',pa'',args''))

rule traverse_inner_class_parts(parts,visitor,args,true) => ((parts',args'))
rule traverse_inner_class_parts(parts,pa,visitor,args,true) => ((parts',pa',args'))
------------------------------------------------------------------
traverse_inner_class_parts(part::parts,visitor,args,true)
=> ((part::parts',args'))
traverse_inner_class_parts(part::parts,pa,visitor,args,true)
=> ((part::parts',pa',args'))
end

(** relation traverse_inner_class_elements
** Helper relation to traverse_inner_class_parts.
**)
relation traverse_inner_class_elements:(Absyn.ElementItem list,
((Absyn.Class * 'a) => (Absyn.Class * 'a)), (* visitor*)
Absyn.Path option,
((Absyn.Class * Absyn.Path option * 'a) => (Absyn.Class * Absyn.Path option * 'a)), (* visitor*)
'a,
bool) (* visit protected elts *)
=> (Absyn.ElementItem list * 'a) =
=> (Absyn.ElementItem list * Absyn.Path option * 'a) =

axiom traverse_inner_class_elements([],_,args,_) => (([],args))
axiom traverse_inner_class_elements([],pa,_,args,_) => (([],pa,args))

rule traverse_inner_class_elementspec(elt_spec,visitor,args,visit_prot)
=> ((elt_spec',args')) &
traverse_inner_class_elements(elts,visitor,args',visit_prot)
=> ((elts',args''))
rule traverse_inner_class_elementspec(elt_spec,pa,visitor,args,visit_prot)
=> ((elt_spec',pa',args')) &
traverse_inner_class_elements(elts,pa,visitor,args',visit_prot)
=> ((elts',pa'',args''))
-------------------------------------------------------------
traverse_inner_class_elements(Absyn.ELEMENTITEM(Absyn.ELEMENT(f,r,io,n,elt_spec,file,line,constr))::elts,visitor,args,visit_prot)
traverse_inner_class_elements(Absyn.ELEMENTITEM(Absyn.ELEMENT(f,r,io,n,elt_spec,file,line,constr))::elts,pa,visitor,args,visit_prot)
=> ((Absyn.ELEMENTITEM(Absyn.ELEMENT(f,r,io,n,elt_spec',file,line,constr))::elts',
pa'',
args''))

rule traverse_inner_class_elements(elts,visitor,args,visit_prot)
=> ((elts',args'))
rule traverse_inner_class_elements(elts,pa,visitor,args,visit_prot)
=> ((elts',pa',args'))
----------------------------------------------------------------
traverse_inner_class_elements(elt::elts,visitor,args,visit_prot)
=> ((elt::elts',args'))
traverse_inner_class_elements(elt::elts,pa,visitor,args,visit_prot)
=> ((elt::elts',pa',args'))
end

(** relation: traverse_inner_class_elementspec
** Helper relation to traverse_inner_class_elements
**)

relation traverse_inner_class_elementspec: ( Absyn.ElementSpec,
((Absyn.Class * 'a) => (Absyn.Class * 'a)), (* visitor*)
Absyn.Path option,
((Absyn.Class * Absyn.Path option * 'a) => (Absyn.Class * Absyn.Path option * 'a)), (* visitor*)
'a,
bool) (* visit protected elts *)
=> (Absyn.ElementSpec * 'a) =
=> (Absyn.ElementSpec * Absyn.Path option * 'a) =

rule visitor((class,args)) => ((class',args')) &
traverse_inner_class(class',visitor,args',visit_prot) => ((class'',args''))
rule visitor((class,pa,args)) => ((class',pa',args')) &
traverse_inner_class(class',pa,visitor,args',visit_prot) => ((class'',pa'',args''))
-------------------------------------
traverse_inner_class_elementspec(Absyn.CLASSDEF(repl,class),visitor,args,visit_prot)
=> ((Absyn.CLASSDEF(repl,class''),args''))
traverse_inner_class_elementspec(Absyn.CLASSDEF(repl,class),pa,visitor,args,visit_prot)
=> ((Absyn.CLASSDEF(repl,class''),pa'',args''))

axiom traverse_inner_class_elementspec(elt_spec,_,args,_) => ((elt_spec,args))
axiom traverse_inner_class_elementspec(elt_spec,pa,_,args,_) => ((elt_spec,pa,args))

end

Expand Down Expand Up @@ -4354,6 +4379,8 @@ relation get_connection_annotation_str: Absyn.EquationItem => string =
SCode.elaborate(p) => p' &
Inst.make_env_from_program(p',Absyn.IDENT("")) => env &
Static.elab_graphics_exp(env,Absyn.CALL(Absyn.CREF_IDENT("Line",[]),fargs), false (*impl*)) => (newexp,_) &
(* this is to clear the error-msg generated by the annotations. *)
Print.clear_error_buf() &
Exp.print_exp_str(newexp) => gexpstr
-------------------------------------------------
get_connection_annotation_str(Absyn.EQUATIONITEM(Absyn.EQ_CONNECT(_,_), SOME(Absyn.COMMENT(SOME(Absyn.ANNOTATION([Absyn.MODIFICATION(_,_,Absyn.CREF_IDENT("Line",_),SOME(Absyn.CLASSMOD(elts,NONE)),_)])),_))))
Expand Down Expand Up @@ -4685,6 +4712,8 @@ relation get_annotation_string: (string,Absyn.Annotation) => string =
Inst.init_vars_modelica_output dae => dae' &
DAE.get_variable_bindings_str dae' => str &
Static.elab_graphics_exp(env,graphicexp,false (*impl*) ) => (graphicexp2,prop) &
(* this is to clear the error-msg generated by the annotations. *)
Print.clear_error_buf() &

Exp.print_exp_str(graphicexp2) => gexpstr &
string_append(str,",") => s1 &
Expand Down Expand Up @@ -4730,6 +4759,8 @@ relation get_annotation_string: (string,Absyn.Annotation) => string =
DAE.get_variable_bindings_str dae' => str &

Static.elab_graphics_exp(env,graphicexp,false (*impl*)) => (graphicexp2,prop) &
(* this is to clear the error-msg generated by the annotations. *)
Print.clear_error_buf() &
Exp.print_exp_str(graphicexp2) => gexpstr &
string_append(str,",") => s1 &
string_append(s1,gexpstr) => totstr
Expand Down Expand Up @@ -5444,13 +5475,15 @@ relation class_in_program:(string,Absyn.Program) => bool =
axiom class_in_program (_,_) => true
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'.
*)
relation get_pathed_class_in_program: (Absyn.Path, Absyn.Program) => Absyn.Class =

rule get_class_in_program(str,p) => c1
rule get_class_in_program(str,p) => c1
---------------------------------
get_pathed_class_in_program (Absyn.IDENT(str),p) => c1

Expand Down
5 changes: 2 additions & 3 deletions Compiler/SimCodegen.rml
Expand Up @@ -508,7 +508,7 @@ relation generate_input_function_code2:(DAELow.Var list,int) => string list =
int_add(i,1) => i' &
Exp.print_component_ref_str(cr) => cr_str &

Util.string_append_list([cr_str,"= in_x[",i_str,"];"]) => assign_str &
Util.string_append_list([cr_str," = in_x[",i_str,"];"]) => assign_str &
generate_input_function_code2(rest,i') => res
--------------------------
generate_input_function_code2((var as DAELow.VAR(cr,_,dir,tp,exp,v,dim,st,index,name,classes,attr,comment,flow))::rest,
Expand Down Expand Up @@ -631,8 +631,7 @@ relation generate_start_attr_code:(DAELow.DAELow) => string =
" int nx, int ny, int np)\n",
"{\n ",
res1',
";\n}\n"]) => res

";\n}\n"]) => res
----------------------------------
generate_start_attr_code(DAELow.DAELOW(vars,knvars,eqns,se,ie,al,ev)) => res

Expand Down
2 changes: 1 addition & 1 deletion Compiler/Static.rml
Expand Up @@ -3114,7 +3114,7 @@ relation fill_default_slots: (Slot list , SCode.Class, Env.Env, bool (*impl*) )
fill_default_slots (SLOT((id,tp),false,e)::xs,class,env,impl) => SLOT((id,tp),true,SOME(exp'))::res

rule fill_default_slots(xs,class,env,impl) => res &
Print.print_error_buf "#Error filling slot, id =" &
Print.print_error_buf "#Error filling slot, id = " &
Print.print_error_buf id &
Print.print_error_buf "\n"
----------
Expand Down

0 comments on commit 7ff2e5e

Please sign in to comment.