@@ -3263,101 +3263,48 @@ protected function cevalBuiltinMod "author: LP
32633263 input FCore . Cache inCache;
32643264 input FCore . Graph inEnv;
32653265 input list< DAE . Exp > inExpExpLst;
3266- input Boolean inBoolean ;
3267- input Absyn . Msg inMsg ;
3266+ input Boolean impl ;
3267+ input Absyn . Msg msg ;
32683268 input Integer numIter;
3269- output FCore . Cache outCache ;
3269+ output FCore . Cache cache = inCache ;
32703270 output Values . Value outValue;
3271+ protected
3272+ Values . Value v1, v2;
3273+ DAE . Exp exp1,exp2;
32713274algorithm
3272- (outCache,outValue):=
3273- matchcontinue (inCache,inEnv,inExpExpLst,inBoolean,inMsg,numIter)
3275+ {exp1,exp2} := inExpExpLst;
3276+ (cache,v1) := ceval(cache,inEnv, exp1, impl, msg,numIter+ 1 );
3277+ (cache,v2) := ceval(cache,inEnv, exp2, impl, msg,numIter+ 1 );
3278+ outValue := match (v1,v2,msg)
32743279 local
3275- Real rv1,rv2,rva,rvb,rvc,rvd;
3276- FCore . Graph env;
3277- DAE . Exp exp1,exp2;
3278- Boolean impl;
3279- Absyn . Msg msg;
3280- Integer ri,ri1,ri2,ri_1;
3280+ Real rv1,rv2;
3281+ Integer ri,ri1,ri2;
32813282 String lhs_str,rhs_str;
3282- FCore . Cache cache;
32833283 SourceInfo info;
32843284
3285- case (cache,env,{exp1,exp2},impl,msg,_)
3286- equation
3287- (cache,Values . REAL (rv1)) = ceval(cache,env, exp1, impl, msg,numIter+ 1 );
3288- (cache,Values . REAL (rv2)) = ceval(cache,env, exp2, impl, msg,numIter+ 1 );
3289- rva = rv1 / rv2;
3290- rvb = floor(rva);
3291- rvc = rvb * rv2;
3292- rvd = rv1 - rvc;
3293- then
3294- (cache,Values . REAL (rvd));
3295- case (cache,env,{exp1,exp2},impl,msg,_)
3296- equation
3297- (cache,Values . INTEGER (ri)) = ceval(cache,env, exp1, impl, msg,numIter+ 1 );
3298- rv1 = intReal(ri);
3299- (cache,Values . REAL (rv2)) = ceval(cache,env, exp2, impl, msg,numIter+ 1 );
3300- rva = rv1 / rv2;
3301- rvb = floor(rva);
3302- rvc = rvb * rv2;
3303- rvd = rv1 - rvc;
3304- then
3305- (cache,Values . REAL (rvd));
3306- case (cache,env,{exp1,exp2},impl,msg,_)
3307- equation
3308- (cache,Values . REAL (rv1)) = ceval(cache,env, exp1, impl, msg,numIter+ 1 );
3309- (cache,Values . INTEGER (ri)) = ceval(cache,env, exp2, impl, msg,numIter+ 1 );
3310- rv2 = intReal(ri);
3311- rva = rv1 / rv2;
3312- rvb = floor(rva);
3313- rvc = rvb * rv2;
3314- rvd = rv1 - rvc;
3315- then
3316- (cache,Values . REAL (rvd));
3317- case (cache,env,{exp1,exp2},impl,msg,_)
3318- equation
3319- (cache,Values . INTEGER (ri1)) = ceval(cache,env, exp1, impl, msg,numIter+ 1 );
3320- (cache,Values . INTEGER (ri2)) = ceval(cache,env, exp2, impl, msg,numIter+ 1 );
3321- rv1 = intReal(ri1);
3322- rv2 = intReal(ri2);
3323- rva = rv1 / rv2;
3324- rvb = floor(rva);
3325- rvc = rvb * rv2;
3326- rvd = rv1 - rvc;
3327- ri_1 = integer(rvd);
3328- then
3329- (cache,Values . INTEGER (ri_1));
3330- case (cache,env,{exp1,exp2},impl,Absyn . MSG (info = info),_)
3285+ case (Values . REAL (rv1),Values . REAL (rv2),_)
3286+ then (Values . REAL (mod(rv1,rv2)));
3287+ case (Values . INTEGER (ri),Values . REAL (rv2),_)
3288+ then (Values . REAL (mod(ri,rv2)));
3289+ case (Values . REAL (rv1),Values . INTEGER (ri),_)
3290+ then (Values . REAL (mod(rv1,ri)));
3291+ case (Values . INTEGER (ri1),Values . INTEGER (ri2),_)
3292+ then (Values . INTEGER (mod(ri1,ri2)));
3293+ case (_,Values . REAL (rv2),Absyn . MSG (info = info))
3294+ guard rv2 == 0 . 0
33313295 equation
3332- (_,Values . REAL (rv2)) = ceval(cache,env, exp2, impl, inMsg,numIter+ 1 );
3333- (rv2 == 0 . 0 ) = true ;
33343296 lhs_str = ExpressionDump . printExpStr(exp1);
33353297 rhs_str = ExpressionDump . printExpStr(exp2);
33363298 Error . addSourceMessage(Error . MODULO_BY_ZERO , {lhs_str,rhs_str}, info);
3337- then
3338- fail();
3339- case (cache,env,{_,exp2},impl,Absyn . NO_MSG (),_)
3340- equation
3341- (_,Values . REAL (rv2)) = ceval(cache,env, exp2, impl, Absyn . NO_MSG (),numIter+ 1 );
3342- (rv2 == 0 . 0 ) = true ;
3343- then
3344- fail();
3345- case (cache,env,{exp1,exp2},impl,Absyn . MSG (info = info),_)
3299+ then fail();
3300+ case (_,Values . INTEGER (0 ),Absyn . MSG (info = info))
33463301 equation
3347- (_,Values . INTEGER (ri2)) = ceval(cache,env, exp2, impl, inMsg,numIter+ 1 );
3348- (ri2 == 0 ) = true ;
33493302 lhs_str = ExpressionDump . printExpStr(exp1);
33503303 rhs_str = ExpressionDump . printExpStr(exp2);
33513304 Error . addSourceMessage(Error . MODULO_BY_ZERO , {lhs_str,rhs_str}, info);
33523305 then
33533306 fail();
3354- case (cache,env,{_,exp2},impl,Absyn . NO_MSG (),_)
3355- equation
3356- (_,Values . INTEGER (ri2)) = ceval(cache,env, exp2, impl, Absyn . NO_MSG (),numIter+ 1 );
3357- (ri2 == 0 ) = true ;
3358- then
3359- fail();
3360- end matchcontinue;
3307+ end match;
33613308end cevalBuiltinMod;
33623309
33633310protected function cevalBuiltinSum "Evaluates the builtin sum function."
0 commit comments