CompiledCode.st
changeset 4854 55c5c4a38728
parent 4836 dc0c027c3c85
child 4977 17a819360ad5
equal deleted inserted replaced
4853:3f5ed291c362 4854:55c5c4a38728
   875         } else {
   875         } else {
   876             searchClass = dummy.ilc_class = aClass;
   876             searchClass = dummy.ilc_class = aClass;
   877         }
   877         }
   878 
   878 
   879         if (nargs <= 15) {
   879         if (nargs <= 15) {
   880 	  OBJ rslt;
   880           OBJ rslt;
   881 #ifdef CONTEXT_DEBUG
   881 #ifdef CONTEXT_DEBUG
   882 	  OBJ sav = __thisContext;
   882           OBJ sav = __thisContext;
   883 #endif
   883 #endif
   884 
   884 
   885           /*
   885           /*
   886            * add virtual sender (unwinding) here later,
   886            * add virtual sender (unwinding) here later,
   887            * to allow hiding contexts in lazy methods.
   887            * to allow hiding contexts in lazy methods.
   890           if (code) {
   890           if (code) {
   891             /* compiled code */
   891             /* compiled code */
   892             switch (nargs) {
   892             switch (nargs) {
   893                 case 0:
   893                 case 0:
   894                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy);
   894                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy);
   895 		    break;
   895                     break;
   896 
   896 
   897                 case 1:
   897                 case 1:
   898                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, ap[0]);
   898                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, ap[0]);
   899 		    break;
   899                     break;
   900 
   900 
   901                 case 2:
   901                 case 2:
   902                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, ap[0], ap[1]);
   902                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, ap[0], ap[1]);
   903 		    break;
   903                     break;
   904 
   904 
   905                 case 3:
   905                 case 3:
   906                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, ap[0], ap[1], ap[2]);
   906                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, ap[0], ap[1], ap[2]);
   907 		    break;
   907                     break;
   908 
   908 
   909                 case 4:
   909                 case 4:
   910                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   910                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   911                                  ap[0], ap[1], ap[2], ap[3]);
   911                                  ap[0], ap[1], ap[2], ap[3]);
   912 		    break;
   912                     break;
   913 
   913 
   914                 case 5:
   914                 case 5:
   915                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   915                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   916                                  ap[0], ap[1], ap[2], ap[3], ap[4]);
   916                                  ap[0], ap[1], ap[2], ap[3], ap[4]);
   917 		    break;
   917                     break;
   918 
   918 
   919                 case 6:
   919                 case 6:
   920                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   920                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   921                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5]);
   921                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5]);
   922 		    break;
   922                     break;
   923 
   923 
   924                 case 7:
   924                 case 7:
   925                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   925                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   926                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6]);
   926                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6]);
   927 		    break;
   927                     break;
   928 
   928 
   929                 case 8:
   929                 case 8:
   930                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   930                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   931                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7]);
   931                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7]);
   932 		    break;
   932                     break;
   933 
   933 
   934                 case 9:
   934                 case 9:
   935                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   935                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   936                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8]);
   936                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8]);
   937 		    break;
   937                     break;
   938 
   938 
   939                 case 10:
   939                 case 10:
   940                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   940                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   941                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], 
   941                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], 
   942                                  ap[9]);
   942                                  ap[9]);
   943 		    break;
   943                     break;
   944 
   944 
   945                 case 11:
   945                 case 11:
   946                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   946                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   947                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], 
   947                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], 
   948                                  ap[9], ap[10]);
   948                                  ap[9], ap[10]);
   949 		    break;
   949                     break;
   950 
   950 
   951                 case 12:
   951                 case 12:
   952                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   952                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   953                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], 
   953                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], 
   954                                  ap[9], ap[10], ap[11]);
   954                                  ap[9], ap[10], ap[11]);
   955 		    break;
   955                     break;
   956 
   956 
   957                 case 13:
   957                 case 13:
   958                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   958                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   959                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], 
   959                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], 
   960                                  ap[9], ap[10], ap[11], ap[12]);
   960                                  ap[9], ap[10], ap[11], ap[12]);
   961 		    break;
   961                     break;
   962 
   962 
   963                 case 14:
   963                 case 14:
   964                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   964                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   965                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], 
   965                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], 
   966                                  ap[9], ap[10], ap[11], ap[12], ap[13]);
   966                                  ap[9], ap[10], ap[11], ap[12], ap[13]);
   967 		    break;
   967                     break;
   968 
   968 
   969                 case 15:
   969                 case 15:
   970                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   970                     rslt = (*code)(anObject, aSymbol, searchClass, &dummy, 
   971                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], 
   971                                  ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], 
   972                                  ap[9], ap[10], ap[11], ap[12], ap[13], ap[14]);
   972                                  ap[9], ap[10], ap[11], ap[12], ap[13], ap[14]);
   973 		    break;
   973                     break;
   974             }
   974             }
   975           } else {
   975           } else {
   976             /* interpreted code */
   976             /* interpreted code */
   977 #ifdef PASS_ARG_POINTER
   977 #ifdef PASS_ARG_POINTER
   978             rslt = __interpret(self, nargs, anObject, aSymbol, searchClass, &dummy, ap);
   978             rslt = __interpret(self, nargs, anObject, aSymbol, searchClass, &dummy, ap);
   979 #else
   979 #else
   980             switch (nargs) {
   980             switch (nargs) {
   981                 case 0:
   981                 case 0:
   982                     rslt = __interpret(self, 0, anObject, aSymbol, searchClass, &dummy);
   982                     rslt = __interpret(self, 0, anObject, aSymbol, searchClass, &dummy);
   983 		    break;
   983                     break;
   984 
   984 
   985                 case 1:
   985                 case 1:
   986                     rslt = __interpret(self, 1, anObject, aSymbol, searchClass, &dummy,
   986                     rslt = __interpret(self, 1, anObject, aSymbol, searchClass, &dummy,
   987                                    ap[0]);
   987                                    ap[0]);
   988 		    break;
   988                     break;
   989 
   989 
   990                 case 2:
   990                 case 2:
   991                     rslt = __interpret(self, 2, anObject, aSymbol, searchClass, &dummy,
   991                     rslt = __interpret(self, 2, anObject, aSymbol, searchClass, &dummy,
   992                                    ap[0], ap[1]);
   992                                    ap[0], ap[1]);
   993 		    break;
   993                     break;
   994 
   994 
   995                 case 3:
   995                 case 3:
   996                     rslt = __interpret(self, 3, anObject, aSymbol, searchClass, &dummy,
   996                     rslt = __interpret(self, 3, anObject, aSymbol, searchClass, &dummy,
   997                                    ap[0], ap[1], ap[2]);
   997                                    ap[0], ap[1], ap[2]);
   998 		    break;
   998                     break;
   999 
   999 
  1000                 case 4:
  1000                 case 4:
  1001                     rslt = __interpret(self, 4, anObject, aSymbol, searchClass, &dummy,
  1001                     rslt = __interpret(self, 4, anObject, aSymbol, searchClass, &dummy,
  1002                                    ap[0], ap[1], ap[2], ap[3]);
  1002                                    ap[0], ap[1], ap[2], ap[3]);
  1003 		    break;
  1003                     break;
  1004 
  1004 
  1005                 case 5:
  1005                 case 5:
  1006                     rslt = __interpret(self, 5, anObject, aSymbol, searchClass, &dummy,
  1006                     rslt = __interpret(self, 5, anObject, aSymbol, searchClass, &dummy,
  1007                                    ap[0], ap[1], ap[2], ap[3], ap[4]);
  1007                                    ap[0], ap[1], ap[2], ap[3], ap[4]);
  1008 		    break;
  1008                     break;
  1009 
  1009 
  1010                 case 6:
  1010                 case 6:
  1011                     rslt = __interpret(self, 6, anObject, aSymbol, searchClass, &dummy,
  1011                     rslt = __interpret(self, 6, anObject, aSymbol, searchClass, &dummy,
  1012                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5]);
  1012                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5]);
  1013 		    break;
  1013                     break;
  1014 
  1014 
  1015                 case 7:
  1015                 case 7:
  1016                     rslt = __interpret(self, 7, anObject, aSymbol, searchClass, &dummy,
  1016                     rslt = __interpret(self, 7, anObject, aSymbol, searchClass, &dummy,
  1017                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6]);
  1017                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6]);
  1018 		    break;
  1018                     break;
  1019 
  1019 
  1020                 case 8:
  1020                 case 8:
  1021                     rslt = __interpret(self, 8, anObject, aSymbol, searchClass, &dummy,
  1021                     rslt = __interpret(self, 8, anObject, aSymbol, searchClass, &dummy,
  1022                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1022                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1023                                    ap[7]);
  1023                                    ap[7]);
  1024 		    break;
  1024                     break;
  1025 
  1025 
  1026                 case 9:
  1026                 case 9:
  1027                     rslt = __interpret(self, 9, anObject, aSymbol, searchClass, &dummy,
  1027                     rslt = __interpret(self, 9, anObject, aSymbol, searchClass, &dummy,
  1028                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1028                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1029                                    ap[7], ap[8]);
  1029                                    ap[7], ap[8]);
  1030 		    break;
  1030                     break;
  1031 
  1031 
  1032                 case 10:
  1032                 case 10:
  1033                     rslt = __interpret(self, 10, anObject, aSymbol, searchClass, &dummy,
  1033                     rslt = __interpret(self, 10, anObject, aSymbol, searchClass, &dummy,
  1034                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1034                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1035                                    ap[7], ap[8], ap[9]);
  1035                                    ap[7], ap[8], ap[9]);
  1036 		    break;
  1036                     break;
  1037 
  1037 
  1038                 case 11:
  1038                 case 11:
  1039                     rslt = __interpret(self, 11, anObject, aSymbol, searchClass, &dummy,
  1039                     rslt = __interpret(self, 11, anObject, aSymbol, searchClass, &dummy,
  1040                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1040                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1041                                    ap[7], ap[8], ap[9], ap[10]);
  1041                                    ap[7], ap[8], ap[9], ap[10]);
  1042 		    break;
  1042                     break;
  1043 
  1043 
  1044                 case 12:
  1044                 case 12:
  1045                     rslt = __interpret(self, 12, anObject, aSymbol, searchClass, &dummy,
  1045                     rslt = __interpret(self, 12, anObject, aSymbol, searchClass, &dummy,
  1046                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1046                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1047                                    ap[7], ap[8], ap[9], ap[11]);
  1047                                    ap[7], ap[8], ap[9], ap[10], ap[11]);
  1048 		    break;
  1048                     break;
  1049 
  1049 
  1050                 case 13:
  1050                 case 13:
  1051                     rslt = __interpret(self, 13, anObject, aSymbol, searchClass, &dummy,
  1051                     rslt = __interpret(self, 13, anObject, aSymbol, searchClass, &dummy,
  1052                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1052                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1053                                    ap[7], ap[8], ap[9], ap[11], ap[12]);
  1053                                    ap[7], ap[8], ap[9], ap[10], ap[11], ap[12]);
  1054 		    break;
  1054                     break;
  1055 
  1055 
  1056                 case 14:
  1056                 case 14:
  1057                     rslt = __interpret(self, 14, anObject, aSymbol, searchClass, &dummy,
  1057                     rslt = __interpret(self, 14, anObject, aSymbol, searchClass, &dummy,
  1058                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1058                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1059                                    ap[7], ap[8], ap[9], ap[11], ap[12], ap[13]);
  1059                                    ap[7], ap[8], ap[9], ap[10], ap[11], ap[12], ap[13]);
  1060 		    break;
  1060                     break;
  1061 
  1061 
  1062                 case 15:
  1062                 case 15:
  1063                     rslt = __interpret(self, 15, anObject, aSymbol, searchClass, &dummy,
  1063                     rslt = __interpret(self, 15, anObject, aSymbol, searchClass, &dummy,
  1064                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1064                                    ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6],
  1065                                    ap[7], ap[8], ap[9], ap[11], ap[12], ap[13], ap[14]);
  1065                                    ap[7], ap[8], ap[9], ap[10], ap[11], ap[12], ap[13], ap[14]);
  1066 		    break;
  1066                     break;
  1067             }
  1067             }
  1068 #endif
  1068 #endif
  1069           }
  1069           }
  1070 #ifdef CONTEXT_DEBUG
  1070 #ifdef CONTEXT_DEBUG
  1071 	  if (sav != __thisContext) {
  1071           if (sav != __thisContext) {
  1072 	      if (code) {
  1072               if (code) {
  1073 	          printf("CONTEXT BOTCH after execution of %x\n", code);
  1073                   printf("CONTEXT BOTCH after execution of %x\n", code);
  1074 	      } else {
  1074               } else {
  1075 	          printf("CONTEXT BOTCH after execution of interpreted method\n");
  1075                   printf("CONTEXT BOTCH after execution of interpreted method\n");
  1076 	          printf("code now: %x\n", __MethodInstPtr(self)->m_code);
  1076                   printf("code now: %x\n", __MethodInstPtr(self)->m_code);
  1077 	      }
  1077               }
  1078 	      printf("context before:\n");
  1078               printf("context before:\n");
  1079 	      __dumpObject__(sav);
  1079               __dumpObject__(sav);
  1080 	      printf("context now:\n");
  1080               printf("context now:\n");
  1081 	      __dumpObject__(__thisContext);
  1081               __dumpObject__(__thisContext);
  1082 	  }
  1082           }
  1083 #endif
  1083 #endif
  1084 	  RETURN (rslt);
  1084           RETURN (rslt);
  1085         }
  1085         }
  1086     }
  1086     }
  1087     badArgs: ;
  1087     badArgs: ;
  1088 %}.
  1088 %}.
  1089     (argArray isMemberOf:Array) ifFalse:[
  1089     (argArray isMemberOf:Array) ifFalse:[
  1512 ! !
  1512 ! !
  1513 
  1513 
  1514 !CompiledCode class methodsFor:'documentation'!
  1514 !CompiledCode class methodsFor:'documentation'!
  1515 
  1515 
  1516 version
  1516 version
  1517     ^ '$Header: /cvs/stx/stx/libbasic/CompiledCode.st,v 1.70 1999-10-04 10:43:22 cg Exp $'
  1517     ^ '$Header: /cvs/stx/stx/libbasic/CompiledCode.st,v 1.71 1999-10-06 15:59:11 ca Exp $'
  1518 ! !
  1518 ! !
  1519 CompiledCode initialize!
  1519 CompiledCode initialize!