/*=======================================================
* 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;
}
}