1 /********************************************************************************
2 *
3 * Copyright (c) 2008 Fujitsu Services Ltd.
4 *
5 * Author: Nick Battle
6 *
7 * This file is part of VDMJ.
8 *
9 * VDMJ is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation, either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * VDMJ is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with VDMJ. If not, see <http://www.gnu.org/licenses/>.
21 *
22 ******************************************************************************/
23
24 package org.overturetool.vdmj.expressions;
25
26 import org.overturetool.vdmj.lex.LexToken;
27 import org.overturetool.vdmj.runtime.Context;
28 import org.overturetool.vdmj.runtime.ValueException;
29 import org.overturetool.vdmj.values.IntegerValue;
30 import org.overturetool.vdmj.values.Value;
31
32 public class RemExpression extends NumericBinaryExpression
33 {
34 private static final long serialVersionUID = 1L;
35
36 public RemExpression(Expression left, LexToken op, Expression right)
37 {
38 super(left, op, right);
39 }
40
41 @Override
42 public Value eval(Context ctxt)
43 {
44 breakpoint.check(location, ctxt);
45
46 try
47 {
48 long lv = left.eval(ctxt).intValue(ctxt);
49 long rv = right.eval(ctxt).intValue(ctxt);
50
51 return new IntegerValue(lv % rv);
52 }
53 catch (ValueException e)
54 {
55 return abort(e);
56 }
57 }
58
59 @Override
60 public String kind()
61 {
62 return "rem";
63 }
64 }