Skip to content

Commit 5b6d8f0

Browse files
author
x97davka
committed
Check more restrictions
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@234 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 724cfb4 commit 5b6d8f0

File tree

1 file changed

+23
-16
lines changed

1 file changed

+23
-16
lines changed

modeq/inst.rml

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -443,41 +443,48 @@ and inst_algorithm : (Env, Mod, Prefix, Connect.Sets, ClassInf.State,
443443
end
444444

445445
and inst_classdef: (Env, Mod, Prefix, Connect.Sets, ClassInf.State,
446-
Explode.ClassDef, bool)
446+
Explode.ClassDef, ClassInf.Restriction, bool)
447447
=> (DAE.DAEcomp list, Env, Connect.Sets, ClassInf.State,
448448
Types.Var list) =
449449

450450
(* FIXME: propagate prot *)
451-
rule inst_element_list(env,mods,pre,csets,ci_state, els)
452-
=> (dae1,env', csets', ci_state', tys) &
453-
inst_list(env',mods,pre,csets',ci_state',inst_equation, eqs)
454-
=> (dae2,env'',csets'', ci_state'') &
455-
inst_list(env'',mods,pre,csets'',ci_state'', inst_algorithm, als)
456-
=> (dae3,env''',csets''', ci_state''') &
451+
rule ClassInf.trans(ci_state, ClassInf.NEWDEF) => ci_state' &
452+
inst_element_list(env,mods,pre,csets,ci_state', els)
453+
=> (dae1,env', csets', ci_state'', tys) &
454+
inst_list(env',mods,pre,csets',ci_state'',inst_equation, eqs)
455+
=> (dae2,env'',csets'', ci_state''') &
456+
inst_list(env'',mods,pre,csets'',ci_state''', inst_algorithm, als)
457+
=> (dae3,env''',csets''', ci_state'''') &
457458
list_append(dae1,dae2) => dae5 &
458459
list_append(dae5,dae3) => dae
459460
-----------------------------
460461
inst_classdef(env,mods,pre, csets, ci_state,
461-
Explode.PARTS(els,eqs,als), prot)
462-
=> (dae,env''', csets''', ci_state''', tys)
462+
Explode.PARTS(els,eqs,als), re, prot)
463+
=> (dae,env''', csets''', ci_state'''', tys)
464+
465+
rule Env.lookup_class(env,cn) => (c as Explode.CLASS(cn2,_,r,_),m) &
466+
467+
ClassInf.start(r, cn2) => new_ci_state &
463468

464-
rule Env.lookup_class(env,cn) => (c,m) &
465469
(* FIXME order *)
466470
Mod.merge(mods,m) => mods' &
467471
Mod.merge(mods',mod) => mods'' &
468-
inst_class_in(env, mods'', pre, csets, ci_state, c, prot)
469-
=> (dae,env, csets', ci_state', tys)
472+
inst_class_in(env, mods'', pre, csets, new_ci_state, c, prot)
473+
=> (dae,env, csets', ci_state', tys) &
474+
475+
(* Check for restriction violations *)
476+
ClassInf.valid(ci_state', re)
470477
----------------------------------------
471478
inst_classdef(env,mods,pre, csets, ci_state,
472-
Explode.DERIVED(cn,ad,mod), prot)
479+
Explode.DERIVED(cn,ad,mod), re, prot)
473480
=> (dae,env, csets', ci_state', tys)
474481

475482
rule not Env.lookup_class(env,cn) => (_,_) &
476483
Exp.path_string(cn) => cns &
477484
print "# unknown class: " & print cns & print "\n"
478485
----------------------------------------
479486
inst_classdef(env,mods,pre,csets,ci_state,
480-
Explode.DERIVED(cn,ad,mod), prot)
487+
Explode.DERIVED(cn,ad,mod), re, prot)
481488
=> fail
482489

483490
end
@@ -488,14 +495,14 @@ and inst_class_in: (Env, Mod, Prefix, Connect.Sets, ClassInf.State,
488495
Types.Var list) =
489496

490497
rule print " instantiating " & print n & print "\n" &
491-
inst_classdef(env,mods,pre,csets,ci_state,d,prot)
498+
inst_classdef(env,mods,pre,csets,ci_state,d,r,prot)
492499
=> (l,env', csets', ci_state', tys)
493500
------------------------------------------------------
494501
inst_class_in(env,mods,pre,csets,ci_state,
495502
c as Explode.CLASS(n,false,r,d), prot)
496503
=> (l,env', csets', ci_state', tys)
497504

498-
rule print "Can't instantiate partial class " & print n & print "\n"
505+
rule print "# Can't instantiate partial class " & print n & print "\n"
499506
------------------------------------------------------
500507
inst_class_in(env,mod,pre, csets,ci_state,
501508
Explode.CLASS(n,true,_,_), prot)

0 commit comments

Comments
 (0)