View Javadoc

1   ////////////////////////////////////////////////////////////////////////////////
2   // MillScript: an Open Spice interpreter and batch website creation tool
3   // Copyright (C) 2001-2004 Open World Ltd
4   // Copyright (C) 2005 Kevin Rogers
5   //
6   // This file is part of MillScript.
7   //
8   // MillScript is free software; you can redistribute it and/or modify it under
9   // the terms of the GNU General Public License as published by the Free
10  // Software Foundation; either version 2 of the License, or (at your option)
11  // any later version.
12  //
13  // MillScript is distributed in the hope that it will be useful, but WITHOUT
14  // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15  // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
16  // more details.
17  //
18  // You should have received a copy of the GNU General Public License along with
19  // MillScript; if not, write to the Free Software Foundation, Inc., 59 Temple
20  // Place, Suite 330, Boston, MA  02111-1307  USA
21  ////////////////////////////////////////////////////////////////////////////////
22  package org.millscript.millscript.functions;
23  
24  import org.millscript.millscript.vm.Machine;
25  
26  /**
27   * This class implements the MillScript <code>cmpNumString</code> function.
28   */
29  public class CmpNumStringFunction extends Function {
30  
31      /**
32       * @see org.millscript.millscript.functions.Function#apply(org.millscript.millscript.vm.Machine, int)
33       */
34      @Override
35      public void apply( final Machine mc, final int nargs ) {
36          checkNargs( mc, 2, nargs );
37          String ys = mc.popString();
38          String xs = mc.popString();
39          try {
40              int x = Integer.parseInt( xs );
41              int y = Integer.parseInt( ys );
42              mc.pushObject( x == y ? Integers.ZERO : x < y ? Integers.M_ONE : Integers.ONE );
43          } catch ( NumberFormatException ex ) {
44              throw(
45                  FunctionAlert.eval(
46                      "Strings not in integer format",
47                      "cmpNumString requires parseable strings"
48                  ).
49                  culpritArg( 1, xs ).
50                  culpritArg( 2, ys ).
51                  mishap()
52              );
53          }
54      }
55  
56  }