[4] | 1 | #include "../BasicCompiler_Common/common.h"
|
---|
| 2 |
|
---|
| 3 | #ifdef _AMD64_
|
---|
| 4 | #include "../BasicCompiler64/opcode.h"
|
---|
| 5 | #else
|
---|
[5] | 6 | #include "../BasicCompiler32/opcode.h"
|
---|
[4] | 7 | #endif
|
---|
| 8 |
|
---|
| 9 | extern HANDLE hHeap;
|
---|
| 10 |
|
---|
[50] | 11 | void CallConstructor(char *ObjectName,int *SubScripts,TYPEINFO &TypeInfo,char *Parameter){
|
---|
[4] | 12 | if(TypeInfo.type!=DEF_OBJECT) return;
|
---|
| 13 |
|
---|
| 14 | /////////////////////////////////////
|
---|
| 15 | // クラスオブジェクトの場合
|
---|
| 16 | // ※コンストラクタの呼び出し
|
---|
| 17 | /////////////////////////////////////
|
---|
| 18 | CClass *pobj_c;
|
---|
| 19 | pobj_c=(CClass *)TypeInfo.u.lpIndex;
|
---|
| 20 |
|
---|
| 21 | SUBINFO *psi;
|
---|
[5] | 22 | psi=GetMethodHash(ObjectName,pobj_c->name,Parameter);
|
---|
[4] | 23 | if(!psi){
|
---|
| 24 | if(Parameter[0]) SetError(113,pobj_c->name,cp);
|
---|
| 25 | return;
|
---|
| 26 | }
|
---|
[5] | 27 |
|
---|
| 28 |
|
---|
| 29 | char temporary[VN_SIZE];
|
---|
| 30 |
|
---|
[4] | 31 | if(SubScripts[0]!=-1){
|
---|
| 32 | int ss[MAX_ARRAYDIM];
|
---|
| 33 | memset(ss,0,MAX_ARRAYDIM*sizeof(int));
|
---|
| 34 | while(1){
|
---|
| 35 | int i3;
|
---|
| 36 | for(i3=0;;i3++){
|
---|
| 37 | if(SubScripts[i3]==-1) break;
|
---|
| 38 |
|
---|
| 39 | if(ss[i3]>SubScripts[i3]){
|
---|
| 40 | ss[i3]=0;
|
---|
| 41 | ss[i3+1]++;
|
---|
| 42 | }
|
---|
| 43 | else break;
|
---|
| 44 | }
|
---|
| 45 | if(SubScripts[i3]==-1) break;
|
---|
[5] | 46 | sprintf(temporary,"%s[%d",ObjectName,ss[0]);
|
---|
[4] | 47 | for(i3=1;;i3++){
|
---|
| 48 | if(SubScripts[i3]==-1) break;
|
---|
| 49 |
|
---|
| 50 | sprintf(temporary+lstrlen(temporary),",%d",ss[i3]);
|
---|
| 51 | }
|
---|
| 52 | lstrcat(temporary,"]");
|
---|
| 53 |
|
---|
| 54 | LONG_PTR lp;
|
---|
| 55 | sprintf(temporary+lstrlen(temporary),".%s",pobj_c->name);
|
---|
| 56 | CallProc(PROC_DEFAULT,
|
---|
| 57 | psi,
|
---|
| 58 | temporary,
|
---|
| 59 | Parameter,
|
---|
| 60 | &lp);
|
---|
| 61 |
|
---|
| 62 | ss[0]++;
|
---|
| 63 |
|
---|
| 64 |
|
---|
| 65 | //ネイティブコードバッファの再確保
|
---|
| 66 | extern int obp_AllocSize;
|
---|
| 67 | if(obp_AllocSize<obp+8192){
|
---|
| 68 | obp_AllocSize+=8192;
|
---|
| 69 | OpBuffer=(char *)HeapReAlloc(hHeap,0,OpBuffer,obp_AllocSize); //matea
|
---|
| 70 | }
|
---|
| 71 | }
|
---|
| 72 | }
|
---|
| 73 | else{
|
---|
| 74 | LONG_PTR lp;
|
---|
[5] | 75 | sprintf(temporary,"%s.%s",ObjectName,pobj_c->name);
|
---|
[4] | 76 | CallProc(PROC_DEFAULT,
|
---|
| 77 | psi,
|
---|
| 78 | temporary,
|
---|
| 79 | Parameter,
|
---|
| 80 | &lp);
|
---|
| 81 | }
|
---|
| 82 | }
|
---|