Changeset 173 in dev


Ignore:
Timestamp:
Jun 20, 2007, 3:38:44 AM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/jenga
Files:
5 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/jenga/include/smoothie/Class.h

    r172 r173  
    44#include "Member.h"
    55#include "Method.h"
     6#include "LexicalAnalysis.h"
    67
    78class InheritedInterface
     
    120121    bool IsDelegate() const;
    121122    bool IsStructure() const;
     123    void SetClassType( ClassType classType )
     124    {
     125        this->classType = classType;
     126    }
    122127
    123128    //継承させる
     
    248253        for( int i=0; desc[i]; i++ ){
    249254            if( desc[i] == '(' ){
    250                 i=BasicSource::JumpStringInPare(desc,i+1);
     255                i=JumpStringInPare(desc,i+1);
    251256                continue;
    252257            }
    253258            else if( desc[i] == '[' ){
    254                 i=BasicSource::JumpStringInBracket(desc,i+1);
     259                i=JumpStringInBracket(desc,i+1);
    255260                continue;
    256261            }
     
    296301    Classes();
    297302    ~Classes();
     303    void Clear();
    298304
    299305    const CClass *Find( const string &fullName ) const;
  • trunk/jenga/include/smoothie/Source.h

    r170 r173  
    3434    bool ReadFile( const string &filePath );
    3535
    36     static bool IsBlank( char c )
    37     {
    38         if( c == ' ' || c == '\t' )
    39         {
    40             return true;
    41         }
    42         return false;
    43     }
    4436    static void Text::SlideString(char *buffer, int slide){
    4537        char *temp;
     
    8274        return buffer+2;
    8375    }
    84     int GetLength(){
     76    const char *GetBuffer() const
     77    {
     78        return buffer+2;
     79    }
     80    int GetLength() const
     81    {
    8582        return length-2;
    8683    }
     
    9996    }
    10097
    101     static bool IsCommandDelimitation( char c ){
    102         if( c == '\n' || c == ':' || c == '\0' ){
    103             return true;
     98    char operator[]( int index ) const
     99    {
     100        if( index>GetLength() )
     101        {
     102            throw "bad access";
    104103        }
    105 
    106         return false;
    107     }
    108 
    109     static int JumpStringInPare(const char *buffer,int pos){
    110         int PareNum;
    111         for(PareNum=1;;pos++){
    112             if(buffer[pos]=='\"'){
    113                 for(pos++;;pos++){
    114                     if(buffer[pos]=='\"') break;
    115                 }
    116                 continue;
    117             }
    118             else if(buffer[pos]=='(') PareNum++;
    119             else if(buffer[pos]==')'){
    120                 PareNum--;
    121                 if(PareNum==0) return pos;
    122             }
    123             else if(buffer[pos]=='\0') break;
    124         }
    125         return 0;
    126     }
    127     static int JumpStringInBracket(const char *buffer,int pos){
    128         int PareNum;
    129         for(PareNum=1;;pos++){
    130             if(buffer[pos]=='\"'){
    131                 for(pos++;;pos++){
    132                     if(buffer[pos]=='\"') break;
    133                 }
    134                 continue;
    135             }
    136             else if(buffer[pos]=='[') PareNum++;
    137             else if(buffer[pos]==']'){
    138                 PareNum--;
    139                 if(PareNum==0) return pos;
    140             }
    141             else if(buffer[pos]=='\0') break;
    142         }
    143         return 0;
     104        return buffer[2+index];
    144105    }
    145106};
  • trunk/jenga/include/smoothie/Type.h

    r172 r173  
    139139    static bool StringToBasicType( const std::string &typeName, int &basicType );
    140140    static bool StringToType( const std::string &typeName, Type &type );
     141    static int GetBasicTypeFromSimpleName( const char *variable );
    141142};
    142143
  • trunk/jenga/include/smoothie/TypeDef.h

    r170 r173  
    2020    Type baseType;
    2121public:
    22     TypeDef( const NamespaceScopes &namespaceScopes, const string &name, const string &baseName );
     22    TypeDef( const NamespaceScopes &namespaceScopes, const string &name, const string &baseName, int nowLine );
    2323    ~TypeDef();
    2424
     
    4646    ~TypeDefCollection();
    4747
    48     void Add( const NamespaceScopes &namespaceScopes, const string &name, const string &baseName );
     48    void Add( const NamespaceScopes &namespaceScopes, const string &name, const string &baseName, int nowLine );
    4949    int GetIndex( const NamespaceScopes &namespaceScopes, const string &name ) const;
    5050    int GetIndex( const string &fullName ) const;
  • trunk/jenga/include/smoothie/Variable.h

    r172 r173  
    176176
    177177extern Variables globalVars;
    178 
    179 
    180 
  • trunk/jenga/projects/smoothie/smoothie.vcproj

    r172 r173  
    273273            </File>
    274274            <File
     275                RelativePath="..\..\src\smoothie\LexicalAnalysis.cpp"
     276                >
     277            </File>
     278            <File
    275279                RelativePath="..\..\src\smoothie\Method.cpp"
    276280                >
     
    281285            </File>
    282286            <File
     287                RelativePath="..\..\src\smoothie\Procedure.cpp"
     288                >
     289            </File>
     290            <File
    283291                RelativePath="..\..\src\smoothie\Prototype.cpp"
    284292                >
     
    298306            <File
    299307                RelativePath="..\..\src\smoothie\Type.cpp"
     308                >
     309            </File>
     310            <File
     311                RelativePath="..\..\src\smoothie\TypeDef.cpp"
     312                >
     313            </File>
     314            <File
     315                RelativePath="..\..\src\smoothie\Variable.cpp"
    300316                >
    301317            </File>
     
    315331            </File>
    316332            <File
     333                RelativePath="..\..\include\smoothie\LexicalAnalysis.h"
     334                >
     335            </File>
     336            <File
    317337                RelativePath="..\..\include\smoothie\Member.h"
    318338                >
  • trunk/jenga/src/smoothie/Class.cpp

    r172 r173  
    669669    iIteNextNum( 0 )
    670670{
    671     memset( pobj_ClassHash, 0, MAX_CLASS_HASH * sizeof(CClass *) );
     671    Clear();
    672672}
    673673Classes::~Classes(){
     674    Clear();
     675}
     676void Classes::Clear()
     677{
    674678    int i;
    675679    for(i=0;i<MAX_CLASS_HASH;i++){
     
    678682
    679683    if(ppobj_IteClass) free(ppobj_IteClass);
     684    memset( pobj_ClassHash, 0, MAX_CLASS_HASH * sizeof(CClass *) );
    680685}
    681686
  • trunk/jenga/src/smoothie/Namespace.cpp

    r170 r173  
    129129        if( source[i] == 1 && source[i+1] == ESC_NAMESPACE ){
    130130            for(i+=2,i2=0;;i2++,i++){
    131                 if( BasicSource::IsCommandDelimitation( source[i] ) ){
     131                if( IsCommandDelimitation( source[i] ) ){
    132132                    temporary[i2]=0;
    133133                    break;
  • trunk/jenga/src/smoothie/Source.cpp

    r170 r173  
    55#include <jenga/include/smoothie/BasicFixed.h>
    66#include <jenga/include/smoothie/Source.h>
     7#include <jenga/include/smoothie/LexicalAnalysis.h>
    78#include <jenga/include/smoothie/SmoothieException.h>
    89
     
    874875                i++;
    875876            }
    876             while( Text::IsBlank( buffer[i] ) ){
     877            while( IsBlank( buffer[i] ) ){
    877878                i++;
    878879            }
     
    882883            if( memicmp( buffer + i, generateDirectiveName.c_str(), generateDirectiveName.size() ) == 0 ){
    883884                i += (int)generateDirectiveName.size();
    884                 while( Text::IsBlank( buffer[i] ) ){
     885                while( IsBlank( buffer[i] ) ){
    885886                    i++;
    886887                }
  • trunk/jenga/src/smoothie/Type.cpp

    r172 r173  
    9393    // Object型だったとき
    9494    if( typeName == "Object" ){
    95         type.SetType( DEF_OBJECT, pobj_DBClass->GetObjectClassPtr() );
     95        type.SetType( DEF_OBJECT, Smoothie::meta.classes.GetObjectClassPtr() );
    9696        return true;
    9797    }
     
    9999    // String型だったとき
    100100    if( typeName == "String" ){
    101         type.SetType( DEF_OBJECT, pobj_DBClass->GetStringClassPtr() );
     101        type.SetType( DEF_OBJECT, Smoothie::meta.classes.GetStringClassPtr() );
    102102        return true;
    103103    }
     
    114114
    115115    //クラス
    116     const CClass *pobj_c = pobj_DBClass->Find( typeName );
     116    const CClass *pobj_c = Smoothie::meta.classes.Find( typeName );
    117117    if(pobj_c){
    118118        type.pClass = pobj_c;
     
    539539
    540540Type Type::String(){
    541     return Type( DEF_OBJECT, *pobj_DBClass->GetStringClassPtr() );
     541    return Type( DEF_OBJECT, *Smoothie::meta.classes.GetStringClassPtr() );
    542542}*/
    543543
     544int Type::GetBasicTypeFromSimpleName( const char *variable ){
     545    extern char DefIntVari[26],DefSngVari[26],DefStrVari[26],divNum,dsvNum,dStrvNum;
     546    int i;
     547    char name[VN_SIZE];
     548
     549    //構造体メンバの場合を考慮
     550    for(i=lstrlen(variable);i>0;i--){
     551        if(variable[i]=='.'){
     552            i++;
     553            break;
     554        }
     555    }
     556
     557    for(;;i++){
     558        if(variable[i]=='('||variable[i]=='\0'){
     559            name[i]=0;
     560            break;
     561        }
     562        name[i]=variable[i];
     563    }
     564    //変数名から選択
     565    i--;
     566    if(name[i]=='#') return DEF_DOUBLE;
     567    if(name[i]=='!') return DEF_SINGLE;
     568    if(name[i]=='%') return DEF_INTEGER;
     569    return DEF_DOUBLE;
     570}
     571
     572
    544573const string BlittableType::GetCreateStaticMethodFullName() const
    545574{
Note: See TracChangeset for help on using the changeset viewer.