Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6446 GerdtR 1
#define _REGOPT_
2
 
3
 
4
 
5
unsigned char optinitreg=TRUE;
6
 
7
 
8
 
9
10
 
11
	t_undef,
12
 
13
	t_string,
14
 
15
};
16
 
17
 
18
 
19
	razr_8h,
20
 
21
	razr_32
22
 
23
24
 
25
26
 
27
void CompareLVIC(BLVIC *bak);
28
 
29
BLVIC *BakLVIC();
30
 
31
 
32
 
33
void KillRegLec(int reg)
34
 
35
	KillVar(regs[0][reg]);
36
 
37
	if(reg<4){
38
 
39
		KillVar(begs[reg+4]);
40
 
41
}
42
 
43
void ClearReg(int reg)
44
 
45
 
46
 
47
REGEQVAR *curv,*nextv;
48
 
49
 
50
 
51
		free(curv);
52
 
53
	}
54
 
55
//	printf("clear reg %d\n",reg);
56
 
57
}
58
 
59
void clearregstat(int regs)
60
 
61
	if(optinitreg==FALSE)return;
62
 
63
 
64
 
65
REGEQVAR *curv,*nextv;
66
 
67
			while(curv){
68
 
69
				free(curv);
70
 
71
			}
72
 
73
		}
74
 
75
}
76
 
77
void initregstat()
78
 
79
	regstat=(REGISTERSTAT *)MALLOC(sizeof(REGISTERSTAT)*8);
80
 
81
	clearregstat();
82
 
83
 
84
 
85
{
86
 
87
		clearregstat();
88
 
89
	}
90
 
91
}
92
 
93
REGISTERSTAT *BakRegStat()
94
 
95
REGISTERSTAT *bakregstat;
96
 
97
	if(optinitreg==FALSE)return NULL;
98
 
99
#else
100
 
101
	(bakregstat+8)->bakvic=BakLVIC();
102
 
103
	memcpy(bakregstat,regstat,sizeof(REGISTERSTAT)*8);
104
 
105
	for(int i=0;i<8;i++){
106
 
107
			cur=(REGEQVAR *)MALLOC(sizeof(REGEQVAR));
108
 
109
			(bakregstat+i)->next=cur;
110
 
111
				news=(REGEQVAR *)MALLOC(sizeof(REGEQVAR));
112
 
113
				cur->next=news->next;
114
 
115
 
116
 
117
	return bakregstat;
118
 
119
120
 
121
{
122
 
123
	if(optinitreg==FALSE||bak==NULL)return;
124
 
125
	if(bak==NULL)return;
126
 
127
#endif
128
 
129
REGEQVAR *cur,*news;
130
 
131
		if((regstat+i)->next){
132
 
133
			memcpy(cur,(regstat+i)->next,sizeof(REGEQVAR));
134
 
135
			while(cur->next){
136
 
137
				memcpy(news,cur->next,sizeof(REGEQVAR));
138
 
139
			}
140
 
141
	}
142
 
143
144
 
145
{
146
 
147
	(regst+reg)->type=t_undef;
148
 
149
	while(curv){
150
 
151
 
152
 
153
	}
154
 
155
}
156
 
157
void AddRegVar(int reg, int razr,ITOK *itok4)
158
 
159
	if(optinitreg==FALSE||(itok4->flag&f_useidx)!=0)return;
160
 
161
	cur=(REGEQVAR *)MALLOC(sizeof(REGEQVAR));
162
 
163
	cur->next=NULL;
164
 
165
 
166
 
167
		news=(regstat+reg)->next;
168
 
169
		news->next=cur;
170
 
171
}
172
 
173
int GetRegVar(ITOK *itok4)
174
 
175
	if(optinitreg==FALSE||(itok4->flag&f_useidx)!=0)return 0;
176
 
177
	for(int i=0;i<8;i++){
178
 
179
		cur=(regstat+i)->next;
180
 
181
			if(strcmp(itok4->name,cur->name)==0){
182
 
183
 
184
 
185
			cur=cur->next;
186
 
187
	}
188
 
189
}
190
 
191
void FreeStat(REGISTERSTAT *bak)
192
 
193
#ifndef OPTVARCONST
194
 
195
#else
196
 
197
	FreeLVIC((bak+8)->bakvic);
198
 
199
	for(int i=0;i<8;i++)ClearRegBak(i,bak);
200
 
201
}
202
 
203
void CompareRegStat(REGISTERSTAT *bak)
204
 
205
#ifndef OPTVARCONST
206
 
207
#else
208
 
209
	CompareLVIC((bak+8)->bakvic);
210
 
211
	for(int i=0;i<8;i++){
212
 
213
				((regstat+i)->type==t_id&&strcmp((regstat+i)->id,(bak+i)->id)!=0))ClearRegBak(i,bak);
214
 
215
}
216
 
217
int convertrazr(int *reg,int razr)
218
 
219
int nr;
220
 
221
		if(*reg<4)nr=razr_8l;
222
 
223
			nr=razr_8h;
224
 
225
		}
226
 
227
	else if(razr==r16)nr=razr_16;
228
 
229
	return nr;
230
 
231
232
 
233
{
234
 
235
	if(optinitreg){
236
 
237
 
238
 
239
}
240
 
241
void GenRegToReg(int regd,int regs,int razr)
242
 
243
	switch(razr){
244
 
245
			op(0x88);
246
 
247
			break;
248
 
249
		case r32:
250
 
251
			op(0x89);
252
 
253
			break;
254
 
255
}
256
 
257
int CheckIDZReg(char *name,int reg,int razr)
258
 
259
 name - адрес строки
260
 
261
{
262
 
263
int retreg=NOINREG;
264
 
265
	if(optinitreg==FALSE||razr>r32)return NOINREG;
266
 
267
	for(i=0;i<8;i++){
268
 
269
		if((regstat+i)->type==t_id){
270
 
271
					(regstat+i)->razr==razr_8h))){
272
 
273
					if(i==reg&&nr==(regstat+i)->razr){
274
 
275
						waralreadinit(razr==r8?begs[reg]:regs[razr/4][reg]);
276
 
277
						return SKIPREG;
278
 
279
					retreg=i;
280
 
281
			}
282
 
283
REGEQVAR *cur;
284
 
285
 
286
 
287
				if(strcmp(name,cur->name)==0){
288
 
289
						if(nr==razr_8h)reg+=4;
290
 
291
						return SKIPREG;
292
 
293
					retreg=i;
294
 
295
				}
296
 
297
			cur=cur->next;
298
 
299
	}
300
 
301
		if(razr==r8){
302
 
303
			if(nr==razr_8h)reg+=4;
304
 
305
		}
306
 
307
	}
308
 
309
}
310
 
311
 
312
 
313
 name - адрес строки
314
 
315
{
316
 
317
	if(optinitreg==FALSE||name==NULL||razr>r32)return;
318
 
319
	ClearReg(reg);
320
 
321
	(regstat+reg)->razr=nr;
322
 
323
	KillRegLec(reg);
324
 
325
326
 
327
{
328
 
329
	nr=convertrazr(®,razr);
330
 
331
			(regstat+reg)->razr==nr){
332
 
333
			if(getnumber((regstat+reg)->id,num))return reg;
334
 
335
	}
336
 
337
}
338
 
339
int GetNumberR(int sreg,unsigned long *num,int razr,unsigned long number)
340
 
341
int nr;
342
 
343
 
344
 
345
	if(optinitreg!=FALSE&&razr<=r32){
346
 
347
			if(reg==sreg)continue;
348
 
349
			if((regstat+reg)->type==t_id&&(regstat+reg)->razr==nr){
350
 
351
				if(isdigit((regstat+reg)->id[0])){
352
 
353
						if(*num==number)return reg;
354
 
355
							dnum=*num-number;
356
 
357
							rreg=reg;
358
 
359
						else if((number-*num)
360
 
361
							nnum=*num;
362
 
363
						}
364
 
365
				}
366
 
367
		}
368
 
369
	}
370
 
371
}
372
 
373
int getnumber(char *buf,unsigned long *num,int *typenum)
374
 
375
int temp2;
376
 
377
unsigned int oinptr,oendinptr;
378
 
379
 
380
 
381
	oendinptr=endinptr;
382
 
383
	inptr=0;
384
 
385
	*num=scannumber(typenum==NULL?&temp2:typenum);
386
 
387
	inptr=oinptr;
388
 
389
	endinptr=oendinptr;
390
 
391
}
392
 
393
char *GetLecsem(int stop1,int stop2,int type)
394
 
395
int oinptr,oinptr2;
396
 
397
int oline;
398
 
399
int i,j;
400
 
401
int otok;
402
 
403
 
404
 
405
		case tk_string:
406
 
407
		case tk_apiproc:
408
 
409
		case tk_declare:
410
 
411
	}
412
 
413
	oinptr2=inptr=inptr2;
414
 
415
	cha=cha2;
416
 
417
	otok=tok;
418
 
419
	i=0;
420
 
421
		pinptr=inptr;
422
 
423
		while(tok==tk_closebracket&&i){
424
 
425
			pinptr=inptr;
426
 
427
		}
428
 
429
	}while(tok!=stop1&&tok!=stop2&&tok!=tk_eof&&itok.type!=type);
430
 
431
 
432
 
433
		nam[0]=cha2;
434
 
435
	}
436
 
437
		do{
438
 
439
			j++;
440
 
441
		if((oinptr2+j)>pinptr)break;
442
 
443
	}
444
 
445
	inptr=oinptr;
446
 
447
	linenumber=oline;
448
 
449
	itok=oitok;
450
 
451
	c=nam[0];
452
 
453
	nam[i]=0;
454
 
455
}
456
 
457
void GetEndLex(int stop1,int stop2,int type)
458
 
459
int i=0;
460
 
461
 
462
 
463
		bufrm=NULL;
464
 
465
	if(strinf.bufstr){
466
 
467
		strinf.bufstr=NULL;
468
 
469
	oscanlexmode=scanlexmode;
470
 
471
	while(tok2!=stop1&&tok2!=stop2&&tok2!=tk_eof&&itok2.type!=type){
472
 
473
		while(tok==tk_closebracket&&i){
474
 
475
			nexttok();
476
 
477
		if(tok==tk_openbracket)i++;
478
 
479
 
480
 
481
		}
482
 
483
			free(strinf.bufstr);
484
 
485
		}
486
 
487
//	retoldscanmode(oscanlexmode);
488
 
489
//	printf("tok2=%d type2=%d\n",tok2,itok2.type);
490
 
491
492
 
493
/*
494
 
495
 size - размерность
496
 
497
{
498
 
499
char nam[SIZEIDREG];
500
 
501
	nr=(am32==0?razr_16:razr_32);
502
 
503
	if(OptNameIDX(name,nam,size)==TRUE){
504
 
505
		(regstat+reg)->razr=nr;
506
 
507
	}
508
 
509
}
510
 
511
 
512
 
513
int i,j;
514
 
515
	j=0;
516
 
517
		size=1;
518
 
519
	}
520
 
521
	for(i=0;;i++){
522
 
523
		char c;
524
 
525
			c=name[j];
526
 
527
		}while(c<=0x20&&c!=0);
528
 
529
		nam[i]=c;
530
 
531
	nam[i]=0;
532
 
533
	return TRUE;
534
 
535
536
 
537
/*
538
 
539
 size - размерность
540
 
541
{
542
 
543
char nam[SIZEIDREG];
544
 
545
int i;
546
 
547
	nr=(am32==0?razr_16:razr_32);
548
 
549
		for(i=0;i<8;i++){
550
 
551
				if(strcmp(nam,(regstat+i)->id)==0){
552
 
553
//					printf("%s %s\n",nam,(regstat+i)->id);
554
 
555
						return SKIPREG;
556
 
557
					retreg=i;
558
 
559
			}
560
 
561
			cur=(regstat+i)->next;
562
 
563
				if(cur->razr==nr&&strcmp(nam,cur->name)==0){
564
 
565
		 				waralreadinit(regs[am32][reg]);
566
 
567
					}
568
 
569
					break;
570
 
571
				cur=cur->next;
572
 
573
		}
574
 
575
	return retreg;
576
 
577
578
 
579
{
580
 
581
	if(optinitreg==FALSE)return NOINREG;
582
 
583
	nr=convertrazr(®d,razr);
584
 
585
	if(nrs==nr&&(regstat+regd)->type==(regstat+regs)->type&&
586
 
587
		if(strcmp((regstat+regd)->id,(regstat+regs)->id)==0)return SKIPREG;
588
 
589
noreg:
590
 
591
	memcpy((regstat+regd),(regstat+regs),sizeof(REGISTERSTAT));
592
 
593
 	if((regstat+regd)->next){
594
 
595
		memcpy(cur,(regstat+regd)->next,sizeof(REGEQVAR));
596
 
597
		while(cur->next){
598
 
599
			memcpy(news,cur->next,sizeof(REGEQVAR));
600
 
601
		}
602
 
603
	(regstat+regd)->razr=nr;
604
 
605
}
606
 
607
int RegSwapReg(int reg1,int reg2,int razr)
608
 
609
int nr,nrs;
610
 
611
	if(optinitreg==FALSE)return NOINREG;
612
 
613
	nr=convertrazr(®1,razr);
614
 
615
	if((regstat+reg2)->type&&(regstat+reg2)->razr>nrs)ClearReg(reg2);
616
 
617
	if((regstat+reg2)->razr=razr_16)ClearReg(reg2);
618
 
619
 
620
 
621
		if(strcmp((regstat+reg1)->id,(regstat+reg2)->id)==0)return SKIPREG;
622
 
623
noreg:
624
 
625
	KillRegLec(reg2);
626
 
627
	memcpy((regstat+reg1),(regstat+reg2),sizeof(REGISTERSTAT));
628
 
629
	return NOINREG;;
630
 
631
632
 
633
/*-----------------22.04.03 15:51-------------------
634
 
635
 убрать инициализацию регистра
636
 
637
{
638
 
639
int len;
640
 
641
	len=strlen(name);
642
 
643
		if((regstat+i)->type==t_id){
644
 
645
			for(;;){
646
 
647
					char c;
648
 
649
 
650
 
651
							c=nam[-1];
652
 
653
						}
654
 
655
						break;
656
 
657
				}
658
 
659
novar:
660
 
661
			}
662
 
663
restart:
664
 
665
REGEQVAR *cur,*prev;
666
 
667
			if(strcmp(cur->name,name)==0){
668
 
669
//				printf("kill '%s'\n",name);
670
 
671
				goto restart;
672
 
673
			prev=cur;
674
 
675
 
676
 
677
					prev->next=cur->next;
678
 
679
					cur=prev->next;
680
 
681
				else{
682
 
683
					cur=cur->next;
684
 
685
			}
686
 
687
	}
688
 
689
690
 
691
 Замена переменных константами
692
 
693
#ifdef OPTVARCONST
694
 
695
BLVIC *mainvic;
696
 
697
//void updnum(int tok4,long long *num);
698
 
699
#define MAXSIZEVIC 64
700
 
701
LVIC *listvic=NULL;
702
 
703
void CreateMainLVIC()
704
 
705
	mainvic=(BLVIC *)MALLOC(sizeof(BLVIC));
706
 
707
	cursizevic=mainvic->sizevic=MAXSIZEVIC;
708
 
709
710
 
711
{
712
 
713
	free(mainvic);
714
 
715
}
716
 
717
BLVIC *BakLVIC()
718
 
719
BLVIC *bakvic;
720
 
721
	bakvic=(BLVIC *)MALLOC(sizeof(BLVIC));
722
 
723
	bakvic->sizevic=cursizevic;
724
 
725
	return bakvic;
726
 
727
728
 
729
{
730
 
731
	if(cursizevicsizevic){
732
 
733
	}
734
 
735
	if(cursizevic>bak->sizevic){
736
 
737
	}
738
 
739
}
740
 
741
void FreeLVIC(BLVIC *bak)
742
 
743
 
744
 
745
	free(bak);
746
 
747
748
 
749
{
750
 
751
	if(bak==NULL)return;
752
 
753
		if((bak->listvic+i)->rec != NULL){
754
 
755
			int j;
756
 
757
				if((listvic+j)->rec==bvic->rec){
758
 
759
					break;
760
 
761
			}
762
 
763
		}
764
 
765
}
766
 
767
void ClearLVIC()
768
 
769
	memset(listvic,0,cursizevic*sizeof(LVIC));
770
 
771
		startfileinfo==NULL?"":(startfileinfo+currentfileinfo)->filename,
772
 
773
}
774
 
775
int Const2Var(ITOK *itok4,long long num,int typenum)
776
 
777
int i;
778
 
779
	if(replasevar&&itok4->rec&&(itok4->flag&f_useidx)==0){
780
 
781
		for(i=0;i
782
 
783
 
784
 
785
		if(i==cursizevic){
786
 
787
				cursizevic+=MAXSIZEVIC;
788
 
789
				for(freevic=cursizevic-1;freevic>i;freevic--)(listvic+freevic)->rec=NULL;
790
 
791
			else i=freevic;
792
 
793
		else if((listvic+i)->contype==typenum&&(listvic+i)->lnumber==num)return FALSE;
794
 
795
		(listvic+i)->contype=typenum;
796
 
797
		switch(itok4->type){
798
 
799
			case tp_paramvar:
800
 
801
				break;
802
 
803
			case tp_gvar:
804
 
805
				break;
806
 
807
				(listvic+i)->typevar=itok4->type;
808
 
809
		}
810
 
811
			startfileinfo==NULL?"":(startfileinfo+currentfileinfo)->filename,
812
 
813
			freevic==-1?"Update":"Add",
814
 
815
			(listvic+i)->number,
816
 
817
	}
818
 
819
}
820
 
821
void Const2VarRec(LVIC *varconst)
822
 
823
int i;
824
 
825
	if(replasevar==0)return;
826
 
827
		if((listvic+i)->rec==varconst->rec)break;
828
 
829
	}
830
 
831
		if(freevic==-1){
832
 
833
			listvic=(LVIC *)REALLOC(listvic,sizeof(LVIC)*cursizevic);
834
 
835
		}
836
 
837
	}
838
 
839
	(listvic+i)->contype=varconst->contype;
840
 
841
	switch(varconst->rec->type){
842
 
843
		case tp_paramvar:
844
 
845
			break;
846
 
847
		case tp_gvar:
848
 
849
			break;
850
 
851
			(listvic+i)->typevar=varconst->rec->type;
852
 
853
	}
854
 
855
856
 
857
{
858
 
859
		for(int i=0;i
860
 
861
				(listvic+i)->rec=NULL;
862
 
863
					startfileinfo==NULL?"":(startfileinfo+currentfileinfo)->filename,
864
 
865
					itok4->name);*/
866
 
867
			}
868
 
869
	}
870
 
871
872
 
873
{
874
 
875
int i;
876
 
877
	for(i=0;i
878
 
879
//			printf("%s(%d)> Modif var '%s' by num=%u ",startfileinfo==NULL?"":(startfileinfo+currentfileinfo)->filename,linenumber,itok4->name,(listvic+i)->number);
880
 
881
				case tk_plusequals:
882
 
883
				case tk_minusequals:
884
 
885
				case tk_xorequals: operand=tk_xor; break;
886
 
887
				case tk_orequals: operand=tk_or; break;
888
 
889
				case tk_divequals: operand=tk_div; break;
890
 
891
				case tk_llequals: operand=tk_ll; break;
892
 
893
					if((listvic+i)->contype==tk_float)(listvic+i)->number|=0x80000000;
894
 
895
					else (listvic+i)->lnumber=-(listvic+i)->lnumber;
896
 
897
				case tk_not:
898
 
899
					return TRUE;;
900
 
901
			switch((listvic+i)->contype){
902
 
903
				case tk_int:
904
 
905
					retcode=calclongnumber(&(listvic+i)->number,num,operand);
906
 
907
				case tk_byte:
908
 
909
				case tk_dword:
910
 
911
 
912
 
913
					retcode=calcqwordnumber((unsigned long long *)&(listvic+i)->lnumber,num,operand);
914
 
915
				case tk_float:
916
 
917
					break;
918
 
919
					retcode=calcdoublenumber(&(listvic+i)->dnumber,*(double *) &num,operand);
920
 
921
			}
922
 
923
			else{
924
 
925
				(listvic+i)->rec=NULL;
926
 
927
			break;
928
 
929
	}
930
 
931
}
932
 
933
void FreeGlobalConst()
934
 
935
	if(replasevar==0)return;
936
 
937
		if((listvic+i)->rec!=NULL&&(listvic+i)->typevar!=tp_localvar){
938
 
939
/*			printf("%s(%d)> Clear global constant var\n",
940
 
941
					linenumber);*/
942
 
943
	}
944
 
945
946
 
947
{
948
 
949
int typenum;
950
 
951
	nr=convertrazr(®,razr);
952
 
953
			(regstat+reg)->razr>=nr){
954
 
955
			if(getnumber((regstat+reg)->id,&num,&typenum)){
956
 
957
				return TRUE;
958
 
959
		}
960
 
961
	return FALSE;
962
 
963
964
 
965
{
966
 
967
int typenum;
968
 
969
	nr=convertrazr(®,razr);
970
 
971
			(regstat+reg)->razr>=nr){
972
 
973
			if(getnumber((regstat+reg)->id,&num,&typenum))return UpdVarConst(itok4,num,typenum,operand);
974
 
975
	}
976
 
977
}
978
 
979
int SwapVarConst(ITOK *itok2,ITOK *itok4)
980
 
981
 
982
 
983
LVIC tempvic;
984
 
985
	if(itok4->rec==NULL||(itok4->flag&f_useidx)!=0)sec=-2;
986
 
987
		if(sec==-2)return TRUE;
988
 
989
	}
990
 
991
		if(sec==-1&&(listvic+i)->rec==itok4->rec)sec=i;
992
 
993
	}
994
 
995
	if(fir==-2)fir=-1;
996
 
997
		memcpy(&tempvic,listvic+fir,sizeof(LVIC));
998
 
999
		memcpy(listvic+sec,&tempvic,sizeof(LVIC));
1000
 
1001
	else if(sec==-1&&fir!=-1)(listvic+fir)->rec=itok4->rec;
1002
 
1003
	return TRUE;
1004
 
1005
1006
 
1007
{
1008
 
1009
int freevic=-1;
1010
 
1011
int typenum;
1012
 
1013
int numinreg=FALSE;
1014
 
1015
	if(replasevar&&itok4->rec&&(itok4->flag&f_useidx)==0&&optinitreg!=FALSE&&razr<=r32&&
1016
 
1017
		for(i=0;i
1018
 
1019
 
1020
 
1021
		if(isdigit((regstat+reg)->id[0])){
1022
 
1023
				if(i!=cursizevic)ConstToReg((listvic+i)->lnumber,reg,razr);	//новую в регистр
1024
 
1025
					if(freevic==-1){
1026
 
1027
						listvic=(LVIC *)REALLOC(listvic,sizeof(LVIC)*cursizevic);
1028
 
1029
					}
1030
 
1031
				}
1032
 
1033
				(listvic+i)->contype=typenum;
1034
 
1035
				switch(itok4->type){
1036
 
1037
					case tp_paramvar:
1038
 
1039
						break;
1040
 
1041
					case tp_gvar:
1042
 
1043
						break;
1044
 
1045
						(listvic+i)->typevar=itok4->type;
1046
 
1047
				}
1048
 
1049
					startfileinfo==NULL?"":(startfileinfo+currentfileinfo)->filename,
1050
 
1051
					freevic==-1?"Update":"Add",
1052
 
1053
					(listvic+i)->number,
1054
 
1055
			}
1056
 
1057
		else{	//нет цифры в регистре
1058
 
1059
				ConstToReg((listvic+i)->lnumber,reg,razr);	//теперь в регистре
1060
 
1061
			}
1062
 
1063
	}
1064
 
1065
}
1066
 
1067
int CheckConstVar(ITOK *itok4)
1068
 
1069
 
1070
 
1071
		for(int i=0;i
1072
 
1073
				itok4->lnumber=(listvic+i)->lnumber;
1074
 
1075
				itok4->flag=0;
1076
 
1077
				return TRUE;
1078
 
1079
			}
1080
 
1081
	}
1082
 
1083
}
1084
 
1085
int CheckConstVar2(ITOK *itok4,long long *num,int *typenum)
1086
 
1087
//	if(replasevar==FALSE||itok4->rec==NULL||(itok4->flag&f_useidx)!=0)return FALSE;
1088
 
1089
		for(int i=0;i
1090
 
1091
				*num=(listvic+i)->lnumber;
1092
 
1093
//				warreplasevar(itok4->name);
1094
 
1095
1096
 
1097
		}
1098
 
1099
	return FALSE;
1100
 
1101
1102
 
1103
void updnum(int tok4,long long *num)
1104
 
1105
	switch(tok4){
1106
 
1107
		case tk_bytevar:
1108
 
1109
			break;
1110
 
1111
		case tk_wordvar:
1112
 
1113
			break;
1114
 
1115
		case tk_dwordvar:
1116
 
1117
			break;
1118
 
1119
	}
1120
 
1121
 */
1122
 
1123
void CheckConstVar3(int *tok4,ITOK *itok4,int razr)
1124
 
1125
long long lnum;
1126
 
1127
	if(replasevar==FALSE||itok4->rec==NULL||(itok4->flag&f_useidx)!=0)return;
1128
 
1129
		if((optimizespeed||itok4->type==tp_gvar||itok4->type==tp_postvar||
1130
 
1131
			switch(*tok4){
1132
 
1133
				case tk_bytevar:
1134
 
1135
					break;
1136
 
1137
				case tk_wordvar:
1138
 
1139
					break;
1140
 
1141
				case tk_dwordvar:
1142
 
1143
					break;
1144
 
1145
			}
1146
 
1147
//			printf("tok=%d num=%d %s\n",*tok4,itok.number,itok.name);
1148
 
1149
		}
1150
 
1151
			if(CheckConstVar2(itok4,&lnum,&rm)){
1152
 
1153
 
1154
 
1155
					*tok4=tk_number;
1156
 
1157
					warreplasevar(itok4->name);
1158
 
1159
			}
1160
 
1161
	}
1162
 
1163
1164
 
1165
>
1166
 
1167
>
1168
 
1169
>
1170
 
1171
>
1172
 
1173
>
1174
 
1175
>
1176
 
1177
>
1178
 
1179
>
1180
 
1181
>
1182
 
1183
>
1184
 
1185
>
1186
 
1187
>
1188
 
1189
>
1190
 
1191
>
1192
 
1193
>
1194
 
1195
>
1196
 
1197
>
1198
 
1199
>
1200
 
1201