Changeset 20 in dev for BasicCompiler_Common
- Timestamp:
- Dec 28, 2006, 5:24:48 AM (18 years ago)
- Location:
- BasicCompiler_Common
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/Object.cpp
r5 r20 257 257 op_call(pSub_free); 258 258 } 259 if(pVar[i3].type==DEF_OBJECT&&pVar[i3].fRef==0){259 else if(pVar[i3].type==DEF_OBJECT&&pVar[i3].fRef==0){ 260 260 //デストラクタの呼び出し 261 261 i5=pVar[i3].u.pobj_c->DestructorMemberSubIndex; -
BasicCompiler_Common/Variable.cpp
r11 r20 281 281 } 282 282 return 1; 283 } 284 285 TYPEINFO GetStringTypeInfo(){ 286 extern CClass *pobj_StringClass; 287 TYPEINFO TypeInfo = { DEF_OBJECT, (LONG_PTR)pobj_StringClass }; 288 return TypeInfo; 283 289 } 284 290 … … 765 771 } 766 772 773 //変数として見つからなかったとき 767 774 if(bError) SetError(3,variable,cp); 768 775 return -1; … … 957 964 } 958 965 else{ 959 //As指定なし 960 pTypeInfo->type=GetTypeFromSimpleName(variable); 961 962 i2=lstrlen(variable)-1; 963 if(i2>=0){ 964 if(!(variable[i2]=='#'||variable[i2]=='!'||variable[i2]=='%'||variable[i2]=='$')) 965 SetError(-103,variable,cp); 966 } 966 ///////////////// 967 // As指定なし 968 ///////////////// 969 970 if( InitBuf[0] == '\0' ){ 971 //As指定も、初期値指定もない場合 972 pTypeInfo->type=GetTypeFromSimpleName(variable); 973 974 i2=lstrlen(variable)-1; 975 if(i2>=0){ 976 if(!(variable[i2]=='#'||variable[i2]=='!'||variable[i2]=='%'||variable[i2]=='$')) 977 SetError(-103,variable,cp); 978 } 979 } 980 else{ 981 //初期値の型を判別して自動的に型情報を付加する 982 983 TYPEINFO BaseType = GetStringTypeInfo(); 984 int result = NumOpe_GetType( InitBuf, &BaseType, &pTypeInfo->u.lpIndex ); 985 986 //エラーの場合 987 if( result == -1 ) return 0; 988 989 pTypeInfo->type = result; 990 } 991 992 } 993 994 if( InitBuf[0] != '\0' && ConstractParameter[0] != '\0' ){ 995 //初期値とコンストラクタパラメータが同時に呼び出されているとき 996 SetError(132, NULL, cp); 997 } 998 999 if( pTypeInfo->type == DEF_OBJECT && InitBuf[0] != '\0' && InitBuf[0] != '[' ){ 1000 lstrcpy( ConstractParameter, InitBuf ); 1001 InitBuf[0] = 0; 967 1002 } 968 1003 … … 1077 1112 AllInitGlobalVarSize); 1078 1113 if(InitBuf[0]){ 1079 //初期代入時のみ、書き込みアクセスを許可する 1080 bool bConstBack = pVar->bConst; 1081 pVar->bConst = false; 1082 1083 int result = SetInitGlobalData(pVar->offset, 1084 pVar->type, 1085 pVar->u.index, 1086 pVar->SubScripts, 1087 InitBuf); 1088 1089 if(!result){ 1090 //動的な式だった場合は代入演算を行う 1091 char temporary[8192]; 1092 sprintf(temporary,"%s=%s",name,InitBuf); 1093 OpcodeCalc(temporary); 1094 } 1095 1096 pVar->bConst = bConstBack; 1114 if( pVar->type == DEF_OBJECT && InitBuf[0] != '[' ){ 1115 //単発式が初期値のオブジェクトの場合 1116 //初期値をコピーコンストラクタに渡す 1117 } 1118 else{ 1119 int result = SetInitGlobalData(pVar->offset, 1120 pVar->type, 1121 pVar->u.index, 1122 pVar->SubScripts, 1123 InitBuf); 1124 1125 if(!result){ 1126 //動的な式だった場合は代入演算を行う 1127 1128 //初期代入時のみ、書き込みアクセスを許可する 1129 bool bConstBack = pVar->bConst; 1130 pVar->bConst = false; 1131 1132 //代入 1133 char temporary[8192]; 1134 sprintf(temporary,"%s=%s",name,InitBuf); 1135 OpcodeCalc(temporary); 1136 1137 //アクセス制限を元に戻す 1138 pVar->bConst = bConstBack; 1139 } 1140 } 1097 1141 } 1098 1142 -
BasicCompiler_Common/error.cpp
r18 r20 176 176 if(num==130) sprintf(msg,"\"%s\" はオブジェクト定数です。書き込みアクセスはできません。",KeyWord); 177 177 if(num==131) lstrcpy(msg,"Const定義されたメソッド内でクラスメンバへの書き込みアクセスはできません。"); 178 if(num==132) lstrcpy(msg,"明示的なコンストラクタ呼び出しと初期値の指定を同時に行うことはできません。"); 178 179 179 180 //Enum関連
Note:
See TracChangeset
for help on using the changeset viewer.