APWTCL Arnulf's Preferred Web Tcl

Artifact [1e5d4653aa]
Login

Artifact [1e5d4653aa]

Artifact 1e5d4653aafb5de94e75470b4afd5ea383ab0d9b:


/*=======================================================
 * Expr.java 
 *
 * "A Tcl like language implementation in Java named APWTCL
 * ((Java) Arnulf's Preferred Web Tcl)"
 *
 * APWTCL Expr class
 *
 * Released under same BSD license as Tcl.
 * (Tcl BSD license found at <http://www.tcl.tk/software/tcltk/license.html>)
 *
 * Copyright 2012 Arnulf P. Wiedemann
 *
 */

package org.apwtcl.lang.cmd;

import java.util.ArrayList;
import org.apwtcl.lang.Interp;
import org.apwtcl.lang.ApwtclObj;
import org.apwtcl.lang.Token;

public class Expr extends Token {

  /* ==================== Expr ================================== */
  public Expr() {
  }

  /* ==================== exprCmd ================================== */
  public int exprCmd(Interp interp, ArrayList<ApwtclObj> args) {
print("expr called!"+args+"!");
    ArrayList<ApwtclObj> expr_result_ptr = new ArrayList<ApwtclObj>();
    ApwtclObj expr_result;
    int retcode;

    if (args.size() == 2) {
      retcode = interp.eval_expression.evalExpression(args.get(1), expr_result_ptr);
    } else {
      if (args.size() > 2) {
        ApwtclObj obj_ptr;

	args.remove(0);
        obj_ptr = interp.default_obj.concatObj(args.size(), args);
        obj_ptr.incrRefCount("I_PKG_CORECMD_1");
        retcode = interp.eval_expression.evalExpression(obj_ptr, expr_result_ptr);
        obj_ptr.decrRefCount("D_PKG_CORE_CMD_1");
      } else {
        interp.wrongNumArgs(1, args, "expression ?...?");
        return ERROR;
      }
    }
    if (retcode != OK) {
      return retcode;
    }
    expr_result = expr_result_ptr.get(0);
    interp.setResult(expr_result);
    expr_result.decrRefCount("D_PKG_CORE_CMD_2");
    return OK;
  }

}