Changeset 40 in dev for BasicCompiler_Common


Ignore:
Timestamp:
Jan 28, 2007, 3:48:22 AM (17 years ago)
Author:
dai_9181
Message:

ByRef修飾子を関数戻り値とDimステートメントで指定可能にした。

Location:
BasicCompiler_Common
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/BasicFixed.h

    r36 r40  
    5454#define NATURAL_TYPE(t) ((t)&MASK_NATURAL)
    5555#define MAKE_PTR_TYPE(t,p)  ((t)|((p)<<8))
     56#define PTR_LEVEL_UP(t) MAKE_PTR_TYPE(NATURAL_TYPE(t),PTR_LEVEL(t)+1)
    5657
    5758#define DEF_PTR_BYTE    MAKE_PTR_TYPE(DEF_BYTE,1)
     
    168169#define ESC_ENDTRY      'm' //End Try
    169170//EXEファイル用制御エスケープシーケンス
    170 #define ESC_USING       'n' //Print命令語のUsing
    171 #define ESC_FOR         'o' //Open命令語のFor
    172 #define ESC_LINENUM     'p' //行番号を示す
     171#define ESC_USING       'o' //Print命令語のUsing
     172#define ESC_FOR         'p' //Open命令語のFor
     173#define ESC_LINENUM     'q' //行番号を示す
    173174
    174175//オブジェクト指向エスケープシーケンス
  • BasicCompiler_Common/Class.cpp

    r31 r40  
    1818
    1919
    20 CMember::CMember( CClass *pobj_c, DWORD access, bool isConst, char *buffer, int NowLine ){
     20CMember::CMember( CClass *pobj_c, DWORD access, bool isConst, bool isRef, char *buffer, int NowLine ){
    2121    extern int cp;
    2222
     
    2525    char init_buf[VN_SIZE];
    2626    char constract_parameter[VN_SIZE];
    27     GetDimentionFormat(buffer,VarName,SubScripts,&TypeInfo,init_buf,constract_parameter);
     27    GetDimentionFormat(buffer,isRef,VarName,SubScripts,&TypeInfo,init_buf,constract_parameter);
    2828
    2929    //重複チェック
     
    4949    this->isConst = isConst;
    5050
     51    //参照型かどうか
     52    this->isRef = isRef;
     53
    5154    //初期データ
    5255    InitBuf=(char *)HeapAlloc(hHeap,0,lstrlen(init_buf)+1);
     
    7073    //定数扱いかどうか
    7174    isConst = pobj->isConst;
     75
     76    //参照型かどうか
     77    isRef = pobj->isRef;
    7278
    7379    //SubScripts
     
    9197bool CMember::IsConst(){
    9298    return isConst;
     99}
     100bool CMember::IsRef(){
     101    return isRef;
     102}
     103
     104int CMember::GetSize(){
     105    if( IsRef() ){
     106        // 参照型
     107        return PTR_SIZE;
     108    }
     109
     110    //メンバサイズを取得
     111    return GetTypeSize(TypeInfo.type,TypeInfo.u.lpIndex);
    93112}
    94113
     
    264283    pobj_InheritsClass = pInheritsClass;
    265284}
    266 void CClass::AddMember( DWORD dwAccess, bool isConst, char *buffer ){
     285void CClass::AddMember( DWORD dwAccess, bool isConst, bool isRef, char *buffer ){
    267286    ppobj_Member = (CMember **)HeapReAlloc( hHeap, 0, ppobj_Member, ( iMemberNum + 1 ) * sizeof(CMember *) );
    268     ppobj_Member[iMemberNum] = new CMember( this, dwAccess, isConst, buffer );
     287    ppobj_Member[iMemberNum] = new CMember( this, dwAccess, isConst, isRef, buffer );
    269288    iMemberNum++;
    270289}
    271 void CClass::AddStaticMember( DWORD dwAccess, bool isConst, char *buffer, int NowLine ){
     290void CClass::AddStaticMember( DWORD dwAccess, bool isConst, bool isRef, char *buffer, int NowLine ){
    272291    ppobj_StaticMember=(CMember **)HeapReAlloc(hHeap,0,ppobj_StaticMember,(iStaticMemberNum+1)*sizeof(CMember *));
    273     ppobj_StaticMember[iStaticMemberNum]=new CMember( this, dwAccess, isConst, buffer, NowLine );
     292    ppobj_StaticMember[iStaticMemberNum]=new CMember( this, dwAccess, isConst, isRef, buffer, NowLine );
    274293    iStaticMemberNum++;
    275294}
     
    439458    //コンポジションの関係にあるメンバも検査する
    440459    for(int i=0;i < iMemberNum;i++){
    441         if(ppobj_Member[i]->TypeInfo.type==DEF_OBJECT){
     460        if(ppobj_Member[i]->TypeInfo.type==DEF_OBJECT && ppobj_Member[i]->IsRef() == false){
    442461            if(ppobj_Member[i]->TypeInfo.u.pobj_Class->IsAbstract())
    443462                return true;
     
    809828    int i,i2,bRet=1;
    810829    for(i=0;i<pobj_c->iMemberNum;i++){
    811         if(pobj_c->ppobj_Member[i]->TypeInfo.type==DEF_OBJECT){
     830        CMember *pMember = pobj_c->ppobj_Member[i];
     831        if(pMember->TypeInfo.type==DEF_OBJECT && pMember->IsRef()==false ){
    812832            //循環参照でないかをチェック
    813             if(pobj_LoopRefCheck->check(pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class->name)){
     833            if(pobj_LoopRefCheck->check(pMember->TypeInfo.u.pobj_Class->name)){
    814834                extern int cp;
    815                 SetError(123,pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class->name,cp);
     835                SetError(124,pMember->TypeInfo.u.pobj_Class->name,cp);
    816836                return 0;
    817837            }
     
    819839            pobj_LoopRefCheck->add(pobj_c->name);
    820840
    821             i2=MemberVar_LoopRefCheck(pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class);
     841            i2=MemberVar_LoopRefCheck(pMember->TypeInfo.u.pobj_Class);
    822842            if(bRet==1) bRet=i2;
    823843
     
    11321152                }
    11331153
     1154                //Ref修飾子
     1155                bool isRef = false;
     1156                if( basbuf[i] == 1 && basbuf[i + 1] == ESC_BYREF ){
     1157                    isRef = true;
     1158                    i += 2;
     1159                }
     1160
    11341161                if(basbuf[i]==1&&(
    11351162                    basbuf[i+1]==ESC_ABSTRACT||basbuf[i+1]==ESC_VIRTUAL||basbuf[i+1]==ESC_OVERRIDE||
     
    12091236                        //静的メンバを追加
    12101237                        cp=i;   //エラー用
    1211                         pobj_c->AddStaticMember( dwAccess, isConst, temporary, i);
     1238                        pobj_c->AddStaticMember( dwAccess, isConst, isRef, temporary, i);
    12121239                    }
    12131240                    else{
    12141241                        //メンバを追加
    12151242                        cp=i;   //エラー用
    1216                         pobj_c->AddMember( dwAccess, isConst, temporary );
     1243                        pobj_c->AddMember( dwAccess, isConst, isRef, temporary );
    12171244
    12181245
     
    12371264                }
    12381265                else{
     1266                    // 文法エラーチェック
     1267                    if( isRef ){
     1268                        SetError(1,NULL,cp);
     1269                    }
     1270
    12391271                    //メソッドを追加
    12401272                    cp=i;   //エラー用
  • BasicCompiler_Common/Class.h

    r29 r40  
    2020class CMember{
    2121    bool isConst;
     22    bool isRef;
    2223public:
    2324    char *name;
     
    3334
    3435
    35     CMember( CClass *pobj_c, DWORD access, bool idConst, char *buffer, int NowLine=-1 );
     36    CMember( CClass *pobj_c, DWORD access, bool idConst, bool isRef, char *buffer, int NowLine=-1 );
    3637    CMember( CMember *pobj );
    3738    CMember();
     
    3940
    4041    bool IsConst();
     42    bool IsRef();
     43    int GetSize();
    4144
    4245
     
    98101    void Inherits( CClass *pInheritsClass );
    99102
    100     void AddMember( DWORD dwAccess, bool idConst, char *buffer );
    101     void AddStaticMember( DWORD dwAccess, bool isConst, char *buffer, int NowLine );
     103    void AddMember( DWORD dwAccess, bool idConst, bool isRef, char *buffer );
     104    void AddStaticMember( DWORD dwAccess, bool isConst, bool isRef, char *buffer, int NowLine );
    102105    void AddMethod( SUBINFO *psi,DWORD dwAccess, bool isConst, BOOL bAbstract, BOOL bVirtual );
    103106    void AddStaticMethod(SUBINFO *psi,DWORD dwAccess);
  • BasicCompiler_Common/Intermediate_Step2.cpp

    r37 r40  
    375375                break;
    376376            case ESC_CONST:
     377            case ESC_BYREF:
    377378                KillStringSpaces(Command+2);
    378379                break;
  • BasicCompiler_Common/Object.cpp

    r34 r40  
    1717
    1818    for(i=0;i<pobj_c->iMemberNum;i++){
    19         if(pobj_c->ppobj_Member[i]->TypeInfo.type==DEF_OBJECT){
     19        CMember *pMember = pobj_c->ppobj_Member[i];
     20
     21        if(pMember->TypeInfo.type==DEF_OBJECT && pMember->IsRef() == false){
    2022            //メンバクラスのアラインメントを取得
    21             member_size=GetAlignment(pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class);
     23            member_size=GetAlignment(pMember->TypeInfo.u.pobj_Class);
    2224        }
    2325        else{
    2426            //メンバサイズを取得
    25             member_size=GetTypeSize(pobj_c->ppobj_Member[i]->TypeInfo.type,pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex);
     27            member_size = pMember->GetSize();
    2628        }
    2729
     
    4951    int iMaxAlign=0;
    5052    for(i=0;i<pobj_c->iMemberNum;i++){
    51         //メンバ変数の型サイズを取得
    52         i2=GetTypeSize(pobj_c->ppobj_Member[i]->TypeInfo.type,pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex);
    53         if(i2==-1) return -1;
     53        CMember *pMember = pobj_c->ppobj_Member[i];
     54
     55        i2 = pMember->GetSize();
    5456
    5557        //アラインメントを算出
    5658        int member_size;
    57         if(pobj_c->ppobj_Member[i]->TypeInfo.type==DEF_OBJECT){
     59        if(pMember->TypeInfo.type==DEF_OBJECT){
    5860            //メンバクラスのアラインメントを取得
    59             member_size=GetAlignment(pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class);
     61            member_size=GetAlignment(pMember->TypeInfo.u.pobj_Class);
    6062        }
    6163        else{
     
    8385        if(pMemberName){
    8486            //メンバ指定がある場合は、オフセットを返す
    85             if(lstrcmp(pobj_c->ppobj_Member[i]->name,pMemberName)==0){
     87            if(lstrcmp(pMember->name,pMemberName)==0){
    8688                if(pMemberNum) *pMemberNum=i;
    8789                return offset;
     
    9092
    9193        //配列を考慮したメンバサイズを取得
    92         member_size=i2 * JumpSubScripts(pobj_c->ppobj_Member[i]->SubScripts);
     94        member_size=i2 * JumpSubScripts(pMember->SubScripts);
    9395
    9496        //メンバサイズを加算
  • BasicCompiler_Common/Subroutine.cpp

    r38 r40  
    687687        ///////////////////
    688688
     689        psi->isReturnRef = false;
     690
    689691        if(pobj_c){
    690692            if(lstrcmp(psi->name,pobj_c->name)==0||
     
    701703        for(;i2>0;i2--){
    702704            if(buffer[i2]==')') break;
     705
    703706            if(buffer[i2]==1&&buffer[i2+1]==ESC_AS){
     707                if( buffer[i2-2] == 1 && buffer[i2-1] == ESC_BYREF ){
     708                    //参照型
     709                    psi->isReturnRef = true;
     710                }
     711
    704712                i2+=2;
    705713                i3=0;
     
    10331041    }
    10341042
    1035     if(psi->ReturnType==DEF_OBJECT){
     1043    if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false){
    10361044        i = psi->RealParmNum;
    10371045
  • BasicCompiler_Common/Variable.cpp

    r36 r40  
    629629    return type;
    630630}
    631 int GetVarType(char *NameBuffer,LONG_PTR *plpIndex,BOOL bError){
     631int GetVarType(const char *NameBuffer,LONG_PTR *plpIndex,BOOL bError){
    632632    extern BOOL bCompilingGlobal;
    633633    int i;
     
    840840}
    841841
    842 BOOL GetVarOffsetReadOnly(char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
     842BOOL GetVarOffsetReadOnly(const char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
    843843    //読み取り専用で変数へアクセス
    844844    return GetVarOffset(
     
    851851        pss);
    852852}
    853 BOOL GetVarOffsetReadWrite(char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
     853BOOL GetVarOffsetReadWrite(const char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
    854854    //読み書き両用で変数へアクセス
    855855    return GetVarOffset(
     
    865865
    866866
    867 BOOL GetDimentionFormat(char *buffer,char *VarName,int *SubScripts,TYPEINFO *pTypeInfo,char *InitBuf,char *ConstractParameter){
     867BOOL GetDimentionFormat(const char *buffer, const bool isRef, char *VarName,int *SubScripts,TYPEINFO *pTypeInfo,char *InitBuf,char *ConstractParameter){
    868868    int i,i2,i3,IsStr;
    869869    char variable[VN_SIZE],temporary[8192];
     
    998998        else{
    999999            //初期値の型を判別して自動的に型情報を付加する
    1000 
    10011000            TYPEINFO BaseType = GetStringTypeInfo();
    10021001            int result = NumOpe_GetType( InitBuf, &BaseType, &pTypeInfo->u.lpIndex );
     
    10151014    }
    10161015
    1017     if( pTypeInfo->type == DEF_OBJECT && InitBuf[0] != '\0' && InitBuf[0] != '[' ){
     1016    if( pTypeInfo->type == DEF_OBJECT && InitBuf[0] != '\0' && InitBuf[0] != '[' && isRef == false ){
    10181017        lstrcpy( ConstractParameter, InitBuf );
    10191018        InitBuf[0] = 0;
  • BasicCompiler_Common/Variable.h

    r10 r40  
    2222void GetArrange(char *variable,char *variAnswer,int *SubScripts);
    2323int GetTypeFromSimpleName(char *variable);
    24 int GetVarType(char *NameBuffer,LONG_PTR *plpIndex,BOOL bError);
    25 BOOL GetVarOffsetReadOnly(char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss=0);
    26 BOOL GetVarOffsetReadWrite(char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss=0);
    27 BOOL GetDimentionFormat(char *buffer,char *VarName,int *SubScripts,TYPEINFO *pTypeInfo,char *InitBuf,char *ConstractParameter);
     24int GetVarType(const char *NameBuffer,LONG_PTR *plpIndex,BOOL bError);
     25BOOL GetVarOffsetReadOnly(const char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss=0);
     26BOOL GetVarOffsetReadWrite(const char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss=0);
     27BOOL GetDimentionFormat(const char *buffer, const bool isRef, char *VarName,int *SubScripts,TYPEINFO *pTypeInfo,char *InitBuf,char *ConstractParameter);
    2828BOOL GetNowStaticVarFullName(char *VarName,char *FullName);
    2929void AddGlobalVariable(char *name,int *SubScripts,TYPEINFO *pTypeInfo,int TypeSize,char *InitBuf,char *ConstractParameter,DWORD dwFlag);
  • BasicCompiler_Common/common.h

    r38 r40  
    157157#define REF_PARAMETER 1
    158158#define OBJECT_PARAMETER 2
     159#define REF_VARIABLE 4
    159160struct VARIABLE{
    160161    char name[255];
     
    243244        CClass *Return_pobj_c;
    244245    }u;
     246    bool isReturnRef;
    245247
    246248    DWORD CompileAddress;
     
    574576
    575577//error.cpp
    576 void SetError(int ErrorNum,char *KeyWord,int pos);
     578void SetError(int ErrorNum,const char *KeyWord,int pos);
    577579void CompileMessage(char *buffer);
    578580void CheckDifferentType(int VarType,LONG_PTR lpVarIndex,int CalcType,LONG_PTR lpCalcIndex,char *pszFuncName,int ParmNum);
  • BasicCompiler_Common/error.cpp

    r34 r40  
    11#include "../BasicCompiler_Common/common.h"
    22
    3 BOOL GetErrorMsg(int num,char *KeyWord,char *msg,int pos){
     3BOOL GetErrorMsg(int num,const char *KeyWord,char *msg,int pos){
    44    extern HANDLE hHeap;
    55    int i2;
    66    char temporary[64];
    77
     8    char tempKeyWord[1024];
    89    if(KeyWord){
     10        lstrcpy(tempKeyWord,KeyWord);
    911        for(i2=0;;i2++){
    10             if(KeyWord[i2]=='\0') break;
    11             if(KeyWord[i2]==1){
    12                 GetDefaultNameFromES(KeyWord[i2+1],temporary);
    13                 SlideString(KeyWord+i2+2,lstrlen(temporary)-2);
    14                 memcpy(KeyWord+i2,temporary,lstrlen(temporary));
     12            if(tempKeyWord[i2]=='\0') break;
     13            if(tempKeyWord[i2]==1){
     14                GetDefaultNameFromES(tempKeyWord[i2+1],temporary);
     15                SlideString(tempKeyWord+i2+2,lstrlen(temporary)-2);
     16                memcpy(tempKeyWord+i2,temporary,lstrlen(temporary));
    1517            }
    1618        }
    1719    }
    18 
    19     if(num==-1||num==-2) lstrcpy(msg,KeyWord);  //部分エラー
     20    else{
     21        lstrcpy(tempKeyWord,"");
     22    }
     23
     24    if(num==-1||num==-2) lstrcpy(msg,tempKeyWord);  //部分エラー
    2025
    2126    if(num==3){
    22         temporary[0]=KeyWord[0];
     27        temporary[0]=tempKeyWord[0];
    2328        for(i2=1;;i2++){
    24             if((!IsVariableChar(KeyWord[i2]))||i2>=255){
     29            if((!IsVariableChar(tempKeyWord[i2]))||i2>=255){
    2530                temporary[i2]=0;
    2631                break;
    2732            }
    28             temporary[i2]=KeyWord[i2];
     33            temporary[i2]=tempKeyWord[i2];
    2934        }
    3035
     
    5257#if defined(JPN)
    5358        //日本語
    54         if(temporary[0]) sprintf(msg,"\"%s\" の使い方が不正です",KeyWord);
     59        if(temporary[0]) sprintf(msg,"\"%s\" の使い方が不正です",tempKeyWord);
    5560        else lstrcpy(msg,"文法が間違っています");
    5661#else
    5762        //英語
    58         if(temporary[0]) sprintf(msg,"How to use the \"%s\" is wrong.",KeyWord);
     63        if(temporary[0]) sprintf(msg,"How to use the \"%s\" is wrong.",tempKeyWord);
    5964        else lstrcpy(msg,"Syntax Error.");
    6065#endif
     
    6974    //日本語
    7075    ////////////////////
    71     if(num==-101) sprintf(msg,"[警告] %sに強制変換されています。データが失われる可能性があります。",KeyWord);
    72     if(num==-102) sprintf(msg,"[警告] %sに強制変換されています。",KeyWord);
    73     if(num==-103) sprintf(msg,"[警告] \"%s\" 型が指定されていません。Double型として扱います。",KeyWord);
    74     if(num==-104) sprintf(msg,"[警告] \"%s\" 戻り値の型が指定されていません。Double型として扱います。",KeyWord);
    75     if(num==-105) sprintf(msg,"[警告] 一時オブジェクトの解放を行えません。キャスト用オブジェクトを用意してください。",KeyWord);
    76     if(num==-106) sprintf(msg,"[警告] DLLファイル \"%s\" が見つかりません。",KeyWord);
    77     if(num==-107) sprintf(msg,"[警告] DLL関数 \"%s\" を参照できません。",KeyWord);
     76    if(num==-101) sprintf(msg,"[警告] %sに強制変換されています。データが失われる可能性があります。",tempKeyWord);
     77    if(num==-102) sprintf(msg,"[警告] %sに強制変換されています。",tempKeyWord);
     78    if(num==-103) sprintf(msg,"[警告] \"%s\" 型が指定されていません。Double型として扱います。",tempKeyWord);
     79    if(num==-104) sprintf(msg,"[警告] \"%s\" 戻り値の型が指定されていません。Double型として扱います。",tempKeyWord);
     80    if(num==-105) sprintf(msg,"[警告] 一時オブジェクトの解放を行えません。キャスト用オブジェクトを用意してください。",tempKeyWord);
     81    if(num==-106) sprintf(msg,"[警告] DLLファイル \"%s\" が見つかりません。",tempKeyWord);
     82    if(num==-107) sprintf(msg,"[警告] DLL関数 \"%s\" を参照できません。",tempKeyWord);
    7883#else
    7984#endif
     
    9196    if(num==2) sprintf(msg,"左のオペランドが、左辺値になっていません");
    9297    //num==3は予約されています
    93     if(num==4) sprintf(msg,"%sの相互関係が一致しません",KeyWord);
     98    if(num==4) sprintf(msg,"%sの相互関係が一致しません",tempKeyWord);
    9499    if(num==5) sprintf(msg,"ダブルクォートの数が一致しません");
    95     if(num==6) sprintf(msg,"\"%s\" ジャンプ先が不正です",KeyWord);
     100    if(num==6) sprintf(msg,"\"%s\" ジャンプ先が不正です",tempKeyWord);
    96101    if(num==7) lstrcpy(msg,"DLL名が長すぎます(拡張子を含め、16文字以下にして下さい)");
    97102    if(num==8) lstrcpy(msg,"コンパイラが認識できない文字コードが含まれています");
    98103    if(num==9) sprintf(msg,"型が違います");
    99     if(num==10) sprintf(msg,"\"%s\" のパラメータ指定が間違っています",KeyWord);
    100     if(num==11) sprintf(msg,"\"%s\" 型が違います",KeyWord);
    101     if(num==12) sprintf(msg,"\"%s\" の使い方が不正です",KeyWord);
    102     if(num==13) sprintf(msg,"\"%s\" を参照できません",KeyWord);
    103     if(num==14) sprintf(msg,"\"%s\" 配列指定が不正です",KeyWord);
    104     if(num==15) sprintf(msg,"\"%s\" はすでに定義されています",KeyWord);
    105     if(num==16) sprintf(msg,"\"%s\" 配列、またはポインタ以外の変数に添え字が指定されています",KeyWord);
     104    if(num==10) sprintf(msg,"\"%s\" のパラメータ指定が間違っています",tempKeyWord);
     105    if(num==11) sprintf(msg,"\"%s\" 型が違います",tempKeyWord);
     106    if(num==12) sprintf(msg,"\"%s\" の使い方が不正です",tempKeyWord);
     107    if(num==13) sprintf(msg,"\"%s\" を参照できません",tempKeyWord);
     108    if(num==14) sprintf(msg,"\"%s\" 配列指定が不正です",tempKeyWord);
     109    if(num==15) sprintf(msg,"\"%s\" はすでに定義されています",tempKeyWord);
     110    if(num==16) sprintf(msg,"\"%s\" 配列、またはポインタ以外の変数に添え字が指定されています",tempKeyWord);
    106111    if(num==17) sprintf(msg,"リソース データが不正です");
    107     if(num==18) sprintf(msg,"\"%s\"はポインタ変数型です。文字列演算を指定することはできません",KeyWord);
    108     if(num==19) sprintf(msg,"\"%s\"は値参照型です。ByVal指定することはできません",KeyWord);
     112    if(num==18) sprintf(msg,"\"%s\"はポインタ変数型です。文字列演算を指定することはできません",tempKeyWord);
     113    if(num==19) sprintf(msg,"\"%s\"は値参照型です。ByVal指定することはできません",tempKeyWord);
    109114    if(num==20) lstrcpy(msg,"全角スペースが含まれています(全角スペースはコンパイラが認識できないので、半角スペースまたはタブ文字にしてください)");
    110115    if(num==21) sprintf(msg,"If制御のブロック指定が不正です");
    111     if(num==22) sprintf(msg,"\"%s\" に対する \"End %s\" が見つかりません",KeyWord,KeyWord);
    112     if(num==23) sprintf(msg,"リソース ファイル \"%s\" の読み込みに失敗",KeyWord);
     116    if(num==22) sprintf(msg,"\"%s\" に対する \"End %s\" が見つかりません",tempKeyWord,tempKeyWord);
     117    if(num==23) sprintf(msg,"リソース ファイル \"%s\" の読み込みに失敗",tempKeyWord);
    113118    if(num==24) lstrcpy(msg,"Export指定の関数のパラメータには実体オブジェクトを利用することはできません(BytePtr型などを利用して下さい)");
    114     if(num==27) sprintf(msg,"\"%s\" は定義されていません",KeyWord);
    115     if(num==28) sprintf(msg,"構造体パラメータはポインタ参照にしてください(%s)",KeyWord);
     119    if(num==27) sprintf(msg,"\"%s\" は定義されていません",tempKeyWord);
     120    if(num==28) sprintf(msg,"構造体パラメータはポインタ参照にしてください(%s)",tempKeyWord);
    116121    if(num==29) sprintf(msg,"配列ポインタを要素と同時に引渡すときは、ポインタ参照(ByRef)にしてください");
    117122    //num==30は予約されています
    118     if(num==31) sprintf(msg,"\"%s\" は構造体です(メンバの参照はピリオド \".\" で区切ってください)",KeyWord);
    119     if(num==32) sprintf(msg,"\"%s\" は構造体ポインタです(メンバの参照は \"->\" で区切ってください)",KeyWord);
     123    if(num==31) sprintf(msg,"\"%s\" は構造体です(メンバの参照はピリオド \".\" で区切ってください)",tempKeyWord);
     124    if(num==32) sprintf(msg,"\"%s\" は構造体ポインタです(メンバの参照は \"->\" で区切ってください)",tempKeyWord);
    120125    if(num==33) sprintf(msg,"定数式にリテラル値、または定数以外のものが含まれています");
    121126    if(num==34) sprintf(msg,"定数はモジュールレベルで宣言して下さい");
    122     if(num==38) sprintf(msg,"\"%s\" 戻り値が存在しないプロシージャです",KeyWord);
    123     if(num==39) sprintf(msg,"\"%s\" はオブジェクトポインタではありません(\"->\" 参照はできません)",KeyWord);
     127    if(num==38) sprintf(msg,"\"%s\" 戻り値が存在しないプロシージャです",tempKeyWord);
     128    if(num==39) sprintf(msg,"\"%s\" はオブジェクトポインタではありません(\"->\" 参照はできません)",tempKeyWord);
    124129    if(num==40) lstrcpy(msg,"関数の戻り値にオブジェクトを指定することはできません");
    125130    if(num==41) lstrcpy(msg,"初期データが不正です");
    126131    if(num==42) lstrcpy(msg,"閉じカッコ \")\" の後に不正な文字が含まれています");
    127132    if(num==43) lstrcpy(msg,"ダブルクォートの後に不正な文字が含まれています");
    128     if(num==45) sprintf(msg,"実数に対して \"%s\" 演算子は利用できません",KeyWord);
     133    if(num==45) sprintf(msg,"実数に対して \"%s\" 演算子は利用できません",tempKeyWord);
    129134    if(num==46) lstrcpy(msg,"配列の添え字に整数以外の値が与えられています");
    130135    if(num==47) lstrcpy(msg,"As演算子の右辺値に型名以外の識別子が指定されています");
    131     if(num==48) sprintf(msg,"%s演算子に対して型名が指定されています",KeyWord);
     136    if(num==48) sprintf(msg,"%s演算子に対して型名が指定されています",tempKeyWord);
    132137    if(num==49) lstrcpy(msg,"添え字に整数以外の型が指定されています");
    133     if(num==50) sprintf(msg,"%sに変換できません",KeyWord);
     138    if(num==50) sprintf(msg,"%sに変換できません",tempKeyWord);
    134139    if(num==51) lstrcpy(msg,"オブジェクト、構造体のアラインメント値は1,2,4,8,16のいずれかでなければなりません");
    135     if(num==52) sprintf(msg,"\"%s\" オーバーロードを解決できません",KeyWord);
    136     if(num==53) sprintf(msg,"\"%s\" 出力ファイルの書き込みに失敗しました。実行されている可能性があります",KeyWord);
    137     if(num==54) sprintf(msg,"対応する%sが存在しません。",KeyWord);
    138     if(num==55) sprintf(msg,"\"%s\" は対応するForステートメントで利用されるカウンタ変数ではありません。",KeyWord);
     140    if(num==52) sprintf(msg,"\"%s\" オーバーロードを解決できません",tempKeyWord);
     141    if(num==53) sprintf(msg,"\"%s\" 出力ファイルの書き込みに失敗しました。実行されている可能性があります",tempKeyWord);
     142    if(num==54) sprintf(msg,"対応する%sが存在しません。",tempKeyWord);
     143    if(num==55) sprintf(msg,"\"%s\" は対応するForステートメントで利用されるカウンタ変数ではありません。",tempKeyWord);
    139144    if(num==56) lstrcpy(msg,"ゼロ割りが行われました。");
    140145    if(num==57) lstrcpy(msg,"8進数のリテラル表記が不正です。");
    141146    if(num==58) lstrcpy(msg,"16進数のリテラル表記が不正です。");
    142     if(num==59) sprintf(msg,"マニフェスト ファイル \"%s\" の読み込みに失敗。",KeyWord);
     147    if(num==59) sprintf(msg,"マニフェスト ファイル \"%s\" の読み込みに失敗。",tempKeyWord);
    143148    if(num==60) lstrcpy(msg,"Staticステートメントはグローバル領域では使用できません。");
    144     if(num==61) sprintf(msg,"\"%s\" は定数です。書き込みアクセスはできません。",KeyWord);
    145     if(num==62) sprintf(msg,"グローバル領域でのReturnは禁止されています。",KeyWord);
     149    if(num==61) sprintf(msg,"\"%s\" は定数です。書き込みアクセスはできません。",tempKeyWord);
     150    if(num==62) sprintf(msg,"グローバル領域でのReturnは禁止されています。",tempKeyWord);
    146151
    147152
    148153    //オブジェクト関連
    149     if(num==102) sprintf(msg,"\"%s\" オブジェクトは定義されていません",KeyWord);
    150     if(num==103) sprintf(msg,"\"%s\" メンバは定義されていません",KeyWord);
    151     if(num==104) sprintf(msg,"\"%s\" 参照方法が違います",KeyWord);
    152     if(num==105) sprintf(msg,"\"%s\" 自身のクラスを継承することはできません",KeyWord);
    153     if(num==106) sprintf(msg,"\"%s\" クラスは定義されていません",KeyWord);
    154     if(num==107) sprintf(msg,"Privateメンバ \"%s\" にアクセスすることはできません",KeyWord);
    155     if(num==108) sprintf(msg,"Protectedメンバ \"%s\" にアクセスすることはできません",KeyWord);
    156     if(num==109) sprintf(msg,"Privateメンバ関数 \"%s\" を呼び出すことはできません",KeyWord);
    157     if(num==110) sprintf(msg,"Protectedメンバ関数 \"%s\" を呼び出すことはできません",KeyWord);
     154    if(num==102) sprintf(msg,"\"%s\" オブジェクトは定義されていません",tempKeyWord);
     155    if(num==103) sprintf(msg,"\"%s\" メンバは定義されていません",tempKeyWord);
     156    if(num==104) sprintf(msg,"\"%s\" 参照方法が違います",tempKeyWord);
     157    if(num==105) sprintf(msg,"\"%s\" 自身のクラスを継承することはできません",tempKeyWord);
     158    if(num==106) sprintf(msg,"\"%s\" クラスは定義されていません",tempKeyWord);
     159    if(num==107) sprintf(msg,"Privateメンバ \"%s\" にアクセスすることはできません",tempKeyWord);
     160    if(num==108) sprintf(msg,"Protectedメンバ \"%s\" にアクセスすることはできません",tempKeyWord);
     161    if(num==109) sprintf(msg,"Privateメンバ関数 \"%s\" を呼び出すことはできません",tempKeyWord);
     162    if(num==110) sprintf(msg,"Protectedメンバ関数 \"%s\" を呼び出すことはできません",tempKeyWord);
    158163    if(num==111) lstrcpy(msg,"InheritsはClass定義内の先頭に記述する必要があります");
    159     if(num==112) sprintf(msg,"\"%s\" はクラス型ではないため、初期パラメータを指定することはできません",KeyWord);
    160     if(num==113) sprintf(msg,"\"%s\" コンストラクタへ渡すパラメータが不正です",KeyWord);
     164    if(num==112) sprintf(msg,"\"%s\" はクラス型ではないため、初期パラメータを指定することはできません",tempKeyWord);
     165    if(num==113) sprintf(msg,"\"%s\" コンストラクタへ渡すパラメータが不正です",tempKeyWord);
    161166    if(num==114) lstrcpy(msg,"デストラクタはパラメータを持てません");
    162167    if(num==115) lstrcpy(msg,"コンストラクタ及びデストラクタは戻り値を持てません");
     
    164169    if(num==117) lstrcpy(msg,"デストラクタの名前が \"~クラス名\" になっていません");
    165170    if(num==118) lstrcpy(msg,"参照する基底クラスが存在しません");
    166     if(num==119) sprintf(msg,"\"%s\" メンバは基底クラスで定義されていません",KeyWord);
     171    if(num==119) sprintf(msg,"\"%s\" メンバは基底クラスで定義されていません",tempKeyWord);
    167172    if(num==120) lstrcpy(msg,"デストラクトするオブジェクトの型が不明です");
    168173    if(num==121) lstrcpy(msg,"New演算子にはクラス以外の型を指定できません");
     
    170175    if(num==123) lstrcpy(msg,"ループ継承が行われました");
    171176    if(num==124) lstrcpy(msg,"循環参照が行われました");
    172     if(num==125) sprintf(msg,"\"%s\" は抽象クラスです。インスタンス化することはできません。",KeyWord);
     177    if(num==125) sprintf(msg,"\"%s\" は抽象クラスです。インスタンス化することはできません。",tempKeyWord);
    173178    if(num==126) lstrcpy(msg,"オペレータのオーバーロードをクラスの外で行うことはできません。");
    174179    if(num==127) lstrcpy(msg,"Override修飾子の指定が無い状況でオーバーライドを行うことはできません。");
    175180    if(num==128) lstrcpy(msg,"オーバーライドを行うときはアクセシビリティを同一にしなければなりません。");
    176     if(num==129) sprintf(msg,"静的メンバ \"%s\" は定義されていません。",KeyWord);
    177     if(num==130) sprintf(msg,"\"%s\" はオブジェクト定数です。書き込みアクセスはできません。",KeyWord);
     181    if(num==129) sprintf(msg,"静的メンバ \"%s\" は定義されていません。",tempKeyWord);
     182    if(num==130) sprintf(msg,"\"%s\" はオブジェクト定数です。書き込みアクセスはできません。",tempKeyWord);
    178183    if(num==131) lstrcpy(msg,"Const定義されたメソッド内でクラスメンバへの書き込みアクセスはできません。");
    179184    if(num==132) lstrcpy(msg,"明示的なコンストラクタ呼び出しと初期値の指定を同時に行うことはできません。");
    180185
    181186    //Enum関連
    182     if(num==150) sprintf(msg,"\"%s\" 値が定義されていません",KeyWord);
    183     if(num==151) sprintf(msg,"\"%s\" 列挙リストに登録されていません",KeyWord);
     187    if(num==150) sprintf(msg,"\"%s\" 値が定義されていません",tempKeyWord);
     188    if(num==151) sprintf(msg,"\"%s\" 列挙リストに登録されていません",tempKeyWord);
    184189
    185190    //リンカ
    186     if(num==200) sprintf(msg,"\"%s\" 未解決です (リンク エラー)",KeyWord);
    187     if(num==201) sprintf(msg,"\"%s\" の読み込みに失敗",KeyWord);
     191    if(num==200) sprintf(msg,"\"%s\" 未解決です (リンク エラー)",tempKeyWord);
     192    if(num==201) sprintf(msg,"\"%s\" の読み込みに失敗",tempKeyWord);
    188193
    189194    //原因不明
     
    197202    if(num==2) sprintf(msg,"Left operand must be l-value.");
    198203    //num==3は予約されています
    199     if(num==4) sprintf(msg,"Correlation of %s is wrong.",KeyWord);
     204    if(num==4) sprintf(msg,"Correlation of %s is wrong.",tempKeyWord);
    200205    if(num==5) sprintf(msg,"Correlation of double quotes is wrong.");
    201     if(num==6) sprintf(msg,"\"%s\" Label not found.",KeyWord);
     206    if(num==6) sprintf(msg,"\"%s\" Label not found.",tempKeyWord);
    202207    if(num==7) lstrcpy(msg,"The DLL name is too long. Must be 16 characters or less.");
    203208    if(num==8) lstrcpy(msg,"The inaccurate characters are contained.");
    204209    if(num==9) sprintf(msg,"Type is wrong.");
    205     if(num==10) sprintf(msg,"\"%s\" Rule of parameter is wrong.",KeyWord);
    206     if(num==11) sprintf(msg,"\"%s\" Type is wrong.",KeyWord);
    207     if(num==12) sprintf(msg,"\"%s\" Not a valid use.",KeyWord);
    208     if(num==13) sprintf(msg,"Cannot refer to \"%s\".",KeyWord);
    209     if(num==14) sprintf(msg,"\"%s\" Array argument(s) out of bound.",KeyWord);
    210     if(num==15) sprintf(msg,"\"%s\" is already defined.",KeyWord);
    211     if(num==16) sprintf(msg,"\"%s\" Argument(s) following variable which is not pointer or array.",KeyWord);
     210    if(num==10) sprintf(msg,"\"%s\" Rule of parameter is wrong.",tempKeyWord);
     211    if(num==11) sprintf(msg,"\"%s\" Type is wrong.",tempKeyWord);
     212    if(num==12) sprintf(msg,"\"%s\" Not a valid use.",tempKeyWord);
     213    if(num==13) sprintf(msg,"Cannot refer to \"%s\".",tempKeyWord);
     214    if(num==14) sprintf(msg,"\"%s\" Array argument(s) out of bound.",tempKeyWord);
     215    if(num==15) sprintf(msg,"\"%s\" is already defined.",tempKeyWord);
     216    if(num==16) sprintf(msg,"\"%s\" Argument(s) following variable which is not pointer or array.",tempKeyWord);
    212217    if(num==17) sprintf(msg,"Invalid resource data.");
    213     if(num==18) sprintf(msg,"\"%s\" Invalid operation on a pointer variable.",KeyWord);
    214     if(num==19) sprintf(msg,"\"%s\" is already to be passed by value. You cannot use \"ByVal\".",KeyWord);
     218    if(num==18) sprintf(msg,"\"%s\" Invalid operation on a pointer variable.",tempKeyWord);
     219    if(num==19) sprintf(msg,"\"%s\" is already to be passed by value. You cannot use \"ByVal\".",tempKeyWord);
    215220    if(num==21) sprintf(msg,"Wrong structure of \"If\" block.");
    216     if(num==22) sprintf(msg,"No matching \"End %s\" found for \"%s\".",KeyWord,KeyWord);
    217     if(num==23) sprintf(msg,"Cannot read the resource file \"%s\".",KeyWord);
     221    if(num==22) sprintf(msg,"No matching \"End %s\" found for \"%s\".",tempKeyWord,tempKeyWord);
     222    if(num==23) sprintf(msg,"Cannot read the resource file \"%s\".",tempKeyWord);
    218223    if(num==24) lstrcpy(msg,"Must not use String type as an argument for exported function. (Use BytePtr type instead.)");
    219     if(num==27) sprintf(msg,"\"%s\" Undefined procedure.",KeyWord);
    220     if(num==28) sprintf(msg,"\"%s\" Structure must not be passed by value. (Use \"ByRef\".)",KeyWord);
     224    if(num==27) sprintf(msg,"\"%s\" Undefined procedure.",tempKeyWord);
     225    if(num==28) sprintf(msg,"\"%s\" Structure must not be passed by value. (Use \"ByRef\".)",tempKeyWord);
    221226    if(num==29) sprintf(msg,"Array must not be passed by value. (Use \"ByRef\".)");
    222227    //num==30は予約されています
    223     if(num==31) sprintf(msg,"\"%s\" is a struct. (Use period \".\" to refer to the members.)",KeyWord);
    224     if(num==32) sprintf(msg,"\"%s\" is a pointer of struct. (Use arrow \"->\" to refer to the members.)",KeyWord);
     228    if(num==31) sprintf(msg,"\"%s\" is a struct. (Use period \".\" to refer to the members.)",tempKeyWord);
     229    if(num==32) sprintf(msg,"\"%s\" is a pointer of struct. (Use arrow \"->\" to refer to the members.)",tempKeyWord);
    225230    if(num==33) sprintf(msg,"Constant formula has a thing that is not literal value or constant value.");
    226231    if(num==34) sprintf(msg,"Constant formula must be defined in the module level.");
    227     if(num==38) sprintf(msg,"\"%s\" is a procedure without a return value.",KeyWord);
    228     if(num==39) sprintf(msg,"\"%s\" is not object pointer. \"->\" is invalid.",KeyWord);
     232    if(num==38) sprintf(msg,"\"%s\" is a procedure without a return value.",tempKeyWord);
     233    if(num==39) sprintf(msg,"\"%s\" is not object pointer. \"->\" is invalid.",tempKeyWord);
    229234    if(num==40) lstrcpy(msg,"Cannot set a object to return value.");
    230235    if(num==41) lstrcpy(msg,"Init data is wrong.");
     
    233238
    234239    //オブジェクト関連
    235     if(num==102) sprintf(msg,"\"%s\" The object is not defined.",KeyWord);
    236     if(num==103) sprintf(msg,"\"%s\" The member is not defined.",KeyWord);
    237     if(num==104) sprintf(msg,"\"%s\" The reference character is different.",KeyWord);
    238     if(num==105) sprintf(msg,"\"%s\" An own class is not inheritable.",KeyWord);
    239     if(num==106) sprintf(msg,"\"%s\" It class is not defined.",KeyWord);
    240     if(num==107) sprintf(msg,"\"%s\" Cannot access the private member.",KeyWord);
    241     if(num==108) sprintf(msg,"\"%s\" Cannot access the protected member.",KeyWord);
    242     if(num==109) sprintf(msg,"\"%s\" Cannot call the private member.",KeyWord);
    243     if(num==110) sprintf(msg,"\"%s\" Cannot call the protected member.",KeyWord);
     240    if(num==102) sprintf(msg,"\"%s\" The object is not defined.",tempKeyWord);
     241    if(num==103) sprintf(msg,"\"%s\" The member is not defined.",tempKeyWord);
     242    if(num==104) sprintf(msg,"\"%s\" The reference character is different.",tempKeyWord);
     243    if(num==105) sprintf(msg,"\"%s\" An own class is not inheritable.",tempKeyWord);
     244    if(num==106) sprintf(msg,"\"%s\" It class is not defined.",tempKeyWord);
     245    if(num==107) sprintf(msg,"\"%s\" Cannot access the private member.",tempKeyWord);
     246    if(num==108) sprintf(msg,"\"%s\" Cannot access the protected member.",tempKeyWord);
     247    if(num==109) sprintf(msg,"\"%s\" Cannot call the private member.",tempKeyWord);
     248    if(num==110) sprintf(msg,"\"%s\" Cannot call the protected member.",tempKeyWord);
    244249    if(num==111) lstrcpy(msg,"The Inherits phrase must be described to the 1st line of class module");
    245     if(num==112) sprintf(msg,"\"%s\" is not class object. Therefor you cannot set the parameter for constructor.",KeyWord);
    246     if(num==113) sprintf(msg,"\"%s\" The parameter for constructor is wrong.",KeyWord);
     250    if(num==112) sprintf(msg,"\"%s\" is not class object. Therefor you cannot set the parameter for constructor.",tempKeyWord);
     251    if(num==113) sprintf(msg,"\"%s\" The parameter for constructor is wrong.",tempKeyWord);
    247252    if(num==114) lstrcpy(msg,"Destructor cannot have a parameter.");
    248253    if(num==115) lstrcpy(msg,"Constructor and Destructor cannot have a return value.");
     
    250255    if(num==117) lstrcpy(msg,"Destructors name must be \"~ClassName\".");
    251256    if(num==118) lstrcpy(msg,"Super class is not found.");
    252     if(num==119) sprintf(msg,"\"%s\" The member is not defined in the super class.",KeyWord);
     257    if(num==119) sprintf(msg,"\"%s\" The member is not defined in the super class.",tempKeyWord);
    253258
    254259    //Enum関連
    255     if(num==150) sprintf(msg,"\"%s\" The value is not set",KeyWord);
    256     if(num==151) sprintf(msg,"\"%s\" is not found from enum lists.",KeyWord);
     260    if(num==150) sprintf(msg,"\"%s\" The value is not set",tempKeyWord);
     261    if(num==151) sprintf(msg,"\"%s\" is not found from enum lists.",tempKeyWord);
    257262
    258263    //リンカ
    259     if(num==200) sprintf(msg,"\"%s\" Unknown error.",KeyWord);
     264    if(num==200) sprintf(msg,"\"%s\" Unknown error.",tempKeyWord);
    260265#endif
    261266
    262267    return 1;
    263268}
    264 void SetError(int num,char *KeyWord,int pos){
     269void SetError(int num,const char *KeyWord,int pos){
    265270    extern HANDLE hHeap;
    266271    extern HWND hMainDlg;
Note: See TracChangeset for help on using the changeset viewer.