Changeset 292 in dev for trunk/abdev/BasicCompiler_Common
- Timestamp:
- Aug 22, 2007, 3:46:23 AM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler_Common
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/NumOpe_GetType.cpp
r290 r292 301 301 } 302 302 303 bool GetTermType( const char *term, Type &resultType, bool &isLiteral, bool *pIsClassName ){ 303 bool GetTermType( const char *term, Type &resultType, bool &isLiteral, bool *pIsClassName ) 304 { 305 if( (string)term=="a[1]") 306 { 307 int test=0; 308 } 304 309 char parameter[VN_SIZE]; 305 310 … … 390 395 { 391 396 // 型パラメータだったとき 397 398 int ptrLevel = PTR_LEVEL( resultType.GetBasicType() ); 399 392 400 if( leftType.HasActualGenericType() ) 393 401 { … … 399 407 // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする 400 408 resultType.SetBasicType( DEF_OBJECT ); 409 } 410 411 for( int i=0; i<ptrLevel; i++ ) 412 { 413 resultType.PtrLevelUp(); 401 414 } 402 415 } … … 513 526 GetArrayElement(termFull,VarName,ArrayElements); 514 527 if(ArrayElements[0]){ 515 GetVarType(VarName,resultType,false); 516 if( resultType.IsObject() ){ 517 if( !GetReturnTypeOfIndexerGetterProc( resultType.GetClass(),resultType) ){ 528 Type classType; 529 GetVarType(VarName,classType,false); 530 if( classType.IsObject() ){ 531 if( !GetReturnTypeOfIndexerGetterProc( classType, resultType ) ){ 518 532 SetError(1,NULL,cp); 519 533 return false; -
trunk/abdev/BasicCompiler_Common/Subroutine.cpp
r290 r292 228 228 229 229 resultType = pUserProc->ReturnType(); 230 231 Type leftType; 232 GetVarType( ObjectName, leftType, false ); 233 234 ///////////////////////////////////////////////////////// 235 // ☆★☆ ジェネリクスサポート ☆★☆ 236 237 if( resultType.IsTypeParameter() ) 238 { 239 // 型パラメータだったとき 240 241 int ptrLevel = PTR_LEVEL( resultType.GetBasicType() ); 242 243 if( leftType.HasActualGenericType() ) 244 { 245 // TODO: GetDummyActualGenericTypeを適切な形に実装し直す 246 resultType = leftType.GetDummyActualGenericType(); 247 } 248 else 249 { 250 // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする 251 resultType.SetBasicType( DEF_OBJECT ); 252 } 253 254 for( int i=0; i<ptrLevel; i++ ) 255 { 256 resultType.PtrLevelUp(); 257 } 258 } 259 260 // 261 ///////////////////////////////////////////////////////// 230 262 } 231 263 … … 274 306 275 307 //インデクサ(getter)の戻り値を取得 276 bool GetReturnTypeOfIndexerGetterProc( const CClass &objClass, Type &resultType ){ 308 bool GetReturnTypeOfIndexerGetterProc( const Type &classType, Type &resultType ) 309 { 277 310 vector<const UserProc *> subs; 278 objClass.GetMethods().Enum( CALC_ARRAY_GET, subs );311 classType.GetClass().GetMethods().Enum( CALC_ARRAY_GET, subs ); 279 312 if( subs.size() == 0 ){ 280 313 return false; … … 282 315 283 316 resultType = subs[0]->ReturnType(); 317 318 319 ///////////////////////////////////////////////////////// 320 // ☆★☆ ジェネリクスサポート ☆★☆ 321 322 if( resultType.IsTypeParameter() ) 323 { 324 // 型パラメータだったとき 325 326 int ptrLevel = PTR_LEVEL( resultType.GetBasicType() ); 327 328 if( classType.HasActualGenericType() ) 329 { 330 // TODO: GetDummyActualGenericTypeを適切な形に実装し直す 331 resultType = classType.GetDummyActualGenericType(); 332 } 333 else 334 { 335 // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする 336 resultType.SetBasicType( DEF_OBJECT ); 337 } 338 339 for( int i=0; i<ptrLevel; i++ ) 340 { 341 resultType.PtrLevelUp(); 342 } 343 } 344 345 // 346 ///////////////////////////////////////////////////////// 284 347 285 348 return true; -
trunk/abdev/BasicCompiler_Common/VariableOpe.cpp
r290 r292 480 480 { 481 481 // 型パラメータだったとき 482 483 int ptrLevel = PTR_LEVEL( resultType.GetBasicType() ); 484 482 485 if( classType.HasActualGenericType() ) 483 486 { … … 489 492 // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする 490 493 resultType.SetBasicType( DEF_OBJECT ); 494 } 495 496 for( int i=0; i<ptrLevel; i++ ) 497 { 498 resultType.PtrLevelUp(); 491 499 } 492 500 } -
trunk/abdev/BasicCompiler_Common/common.h
r290 r292 356 356 bool CallPropertyMethod( const char *variable, const char *rightSide, Type &resultType); 357 357 bool GetReturnTypeOfPropertyMethod( const char *variable, const char *rightSide, Type &resultType ); 358 bool GetReturnTypeOfIndexerGetterProc( const CClass &objClass, Type &resultType );358 bool GetReturnTypeOfIndexerGetterProc( const Type &classType, Type &resultType ); 359 359 int AddProcPtrInfo( const string &typeExpression, int nowLine ); 360 360 bool IsNeedProcCompile(); -
trunk/abdev/BasicCompiler_Common/src/Type.cpp
r290 r292 408 408 bool Type::IsTypeParameter() const 409 409 { 410 return ( basicType== DEF_TYPE_PARAMETER );410 return ( NATURAL_TYPE(basicType) == DEF_TYPE_PARAMETER ); 411 411 } 412 412 bool Type::IsObjectClass() const
Note:
See TracChangeset
for help on using the changeset viewer.