Changeset 12063


Ignore:
Timestamp:
07/26/09 20:33:16 (14 years ago)
Author:
ehuelsmann
Message:

Do stack frame handling only in LispThread?;
dispatch funcall to the execute() methods there.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/Lisp.java

    r12062 r12063  
    141141    throws ConditionThrowable
    142142  {
    143     LispObject stack = thread.getStack();
    144     thread.pushStackFrame(fun, args);
    145143    thread._values = null;
    146     LispObject result;
    147     if (profiling)
    148       if (!sampling)
    149         fun.incrementCallCount();
    150     try
    151       {
    152         switch (args.length)
    153           {
    154           case 0:
    155             result = fun.execute();
    156             break;
    157           case 1:
    158             result = fun.execute(args[0]);
    159             break;
    160           case 2:
    161             result = fun.execute(args[0], args[1]);
    162             break;
    163           case 3:
    164             result = fun.execute(args[0], args[1], args[2]);
    165             break;
    166           case 4:
    167             result = fun.execute(args[0], args[1], args[2], args[3]);
    168             break;
    169           case 5:
    170             result = fun.execute(args[0], args[1], args[2], args[3],
    171                                  args[4]);
    172             break;
    173           case 6:
    174             result = fun.execute(args[0], args[1], args[2], args[3],
    175                                  args[4], args[5]);
    176             break;
    177           case 7:
    178             result = fun.execute(args[0], args[1], args[2], args[3],
    179                                  args[4], args[5], args[6]);
    180             break;
    181           case 8:
    182             result = fun.execute(args[0], args[1], args[2], args[3],
    183                                  args[4], args[5], args[6], args[7]);
    184             break;
    185           default:
    186             result = fun.execute(args);
    187             break;
    188           }
    189       }
    190     finally
    191       {
    192         thread.setStack(stack);
    193       }
    194     return result;
     144
     145    // 26-07-2009: For some reason we cannot "just" call the array version;
     146    // it causes an error (Wrong number of arguments for LOOP-FOR-IN)
     147    // which is probably a sign of an issue in our design?
     148    switch (args.length)
     149      {
     150      case 0:
     151        return thread.execute(fun);
     152      case 1:
     153        return thread.execute(fun, args[0]);
     154      case 2:
     155        return thread.execute(fun, args[0], args[1]);
     156      case 3:
     157        return thread.execute(fun, args[0], args[1], args[2]);
     158      case 4:
     159        return thread.execute(fun, args[0], args[1], args[2], args[3]);
     160      case 5:
     161        return thread.execute(fun, args[0], args[1], args[2], args[3],
     162                              args[4]);
     163      case 6:
     164        return thread.execute(fun, args[0], args[1], args[2], args[3],
     165                              args[4], args[5]);
     166      case 7:
     167        return thread.execute(fun, args[0], args[1], args[2], args[3],
     168                              args[4], args[5], args[6]);
     169      case 8:
     170        return thread.execute(fun, args[0], args[1], args[2], args[3],
     171                              args[4], args[5], args[6], args[7]);
     172      default:
     173        return thread.execute(fun, args);
     174    }
    195175  }
    196176
Note: See TracChangeset for help on using the changeset viewer.