Changeset 11558


Ignore:
Timestamp:
01/15/09 23:51:04 (12 years ago)
Author:
astalla
Message:

Solved a bug in invokeFunction (the symbol was not derived correctly from
the function name)

Location:
branches/scripting/j/src/org/armedbear/lisp/scripting
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/scripting/j/src/org/armedbear/lisp/scripting/AbclScriptEngine.java

    r11450 r11558  
    248248      return findSymbol(name, null);
    249249    } else {
     250        if((i < name.length() - 1) && (name.charAt(i + 1) == ':')) {
     251      return findSymbol(name.substring(i + 2), name.substring(0, i));
     252        } else {
    250253      return findSymbol(name.substring(i + 1), name.substring(0, i));
     254        }
    251255    }
    252256  }
     
    397401  @Override
    398402  public Object invokeFunction(String name, Object... args) throws ScriptException, NoSuchMethodException {
    399     try {
    400       Symbol s = findSymbol(name);
    401       if(s != null) {
    402         LispObject f = s.getSymbolFunction();
    403         if(f != null && f instanceof Function) {
    404           LispObject[] wrappedArgs = new LispObject[args.length];
    405           for(int i = 0; i < args.length; ++i) {
    406             wrappedArgs[i] = toLisp(args[i]);
    407           }
    408           switch(args.length) {
    409             case 0:
    410               return LispThread.currentThread().execute(f);
    411             case 1:
    412               return LispThread.currentThread().execute(f, wrappedArgs[0]);
    413             case 2:
    414               return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1]);
    415             case 3:
    416               return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1], wrappedArgs[2]);             
    417             case 4:
    418               return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1], wrappedArgs[2], wrappedArgs[3]);
    419             case 5:
    420               return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1], wrappedArgs[2], wrappedArgs[3], wrappedArgs[4]);
    421             case 6:
    422               return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1], wrappedArgs[2], wrappedArgs[3], wrappedArgs[4], wrappedArgs[5]);
    423             case 7:
    424               return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1], wrappedArgs[2], wrappedArgs[3], wrappedArgs[4], wrappedArgs[5], wrappedArgs[6]);
    425             case 8:
    426               return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1], wrappedArgs[2], wrappedArgs[3], wrappedArgs[4], wrappedArgs[5], wrappedArgs[6], wrappedArgs[7]);
    427             default:
    428               return LispThread.currentThread().execute(f, wrappedArgs);
    429           }
    430         } else {
    431           throw new NoSuchMethodException(name);
    432         }
    433       } else {
    434         throw new NoSuchMethodException(name);
     403      try {
     404    Symbol s;
     405    if(name.indexOf(':') >= 0) {
     406        s = findSymbol(name);
     407    } else {
     408        s = findSymbol(name, "ABCL-SCRIPT-USER");
     409    }
     410    if(s != null) {
     411        LispObject f = s.getSymbolFunction();
     412        if(f != null && f instanceof Function) {
     413      LispObject[] wrappedArgs = new LispObject[args.length];
     414      for(int i = 0; i < args.length; ++i) {
     415          wrappedArgs[i] = toLisp(args[i]);
    435416      }
    436     } catch (ConditionThrowable e) {
    437       throw new ScriptException(new RuntimeException(e));
    438     }
     417      switch(args.length) {
     418      case 0:
     419          return LispThread.currentThread().execute(f);
     420      case 1:
     421          return LispThread.currentThread().execute(f, wrappedArgs[0]);
     422      case 2:
     423          return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1]);
     424      case 3:
     425          return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1], wrappedArgs[2]);             
     426      case 4:
     427          return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1], wrappedArgs[2], wrappedArgs[3]);
     428      case 5:
     429          return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1], wrappedArgs[2], wrappedArgs[3], wrappedArgs[4]);
     430      case 6:
     431          return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1], wrappedArgs[2], wrappedArgs[3], wrappedArgs[4], wrappedArgs[5]);
     432      case 7:
     433          return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1], wrappedArgs[2], wrappedArgs[3], wrappedArgs[4], wrappedArgs[5], wrappedArgs[6]);
     434      case 8:
     435          return LispThread.currentThread().execute(f, wrappedArgs[0], wrappedArgs[1], wrappedArgs[2], wrappedArgs[3], wrappedArgs[4], wrappedArgs[5], wrappedArgs[6], wrappedArgs[7]);
     436      default:
     437          return LispThread.currentThread().execute(f, wrappedArgs);
     438      }
     439        } else {
     440      throw new NoSuchMethodException(name);
     441        }
     442    } else {
     443        throw new NoSuchMethodException(name);
     444    }
     445      } catch (ConditionThrowable e) {
     446    throw new ScriptException(new RuntimeException(e));
     447      }
    439448  }
    440449
     
    468477  public CompiledScript compile(String script) throws ScriptException {
    469478    try {
    470       Function f = (Function) compileScript.execute(new SimpleString(script));
    471       return new AbclCompiledScript(f);
     479        Function f = (Function) compileScript.execute(new SimpleString(script));
     480        return new AbclCompiledScript(f);
    472481    } catch (ConditionThrowable e) {
    473482      throw new ScriptException(new Exception(e));
  • branches/scripting/j/src/org/armedbear/lisp/scripting/lisp/abcl-script.lisp

    r11450 r11558  
    8484
    8585(defun compile-script (code-string)
    86   (let ((*package* (find-package :abcl-script-user)))
    87     (eval `(compile nil
    88       (lambda ()
    89         ,@(read-from-string (concatenate 'string "(" code-string ")")))))))
     86  (eval
     87   `(compile
     88     nil
     89     (lambda ()
     90       ,@(let ((*package* (find-package :abcl-script-user)))
     91        (read-from-string (concatenate 'string "(" code-string ")")))))))
    9092
    9193
Note: See TracChangeset for help on using the changeset viewer.