EnglishРусский  

   ..

   alias.c

   alias.h

   bcodes.c

   bcodes.h

   body.c

   compile.c

   compile.h

   define.c

   define.h

   desc.c

   expr.c

   extern.c

   for.c

   foreach.c

   func.c

   func.h

   global.c

   global.h

   goto.c

   if.c

   ifdef.c

   ifdef.h

   import.c

   import.h

   include.c

   include.h

   jump.c

   lexem.c

   lexem.h

   macro.c

   macro.h

   operlist.txt

   out.c

   out.h

   subfunc.c

   switch.c

   type.c

   type.h

   vars.c

   while.c

   with.c

Реклама

Инсталлятор CreateInstall
Бесплатные и коммерческие инсталляторы

 1 /******************************************************************************
 2 *
 3 * Copyright (C) 2006, The Gentee Group. All rights reserved.
 4 * This file is part of the Gentee open source project - http://www.gentee.com.
 5 *
 6 * THIS FILE IS PROVIDED UNDER THE TERMS OF THE GENTEE LICENSE ("AGREEMENT").
 7 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES RECIPIENTS
 8 * ACCEPTANCE OF THE AGREEMENT.
 9 *
10 * ID: jump 07.02.07 0.0.A.
11 *
12 * Author: Alexander Krivonogov ( algen )
13 *
14 * Summary: Переходы и метки
15 *
16 ******************************************************************************/
17 
18 #include "func.h"
19 
20 /*-----------------------------------------------------------------------------
21 *
22 * ID: j_jump 07.02.06 0.0.A.
23 *
24 * Summary: Добавление перехода в таблицу меток
25 *
26 -----------------------------------------------------------------------------*/
27 uint STDCALL j_jump( uint cmd, uint flag, uint link )
28 {
29    uint      off;        //Смещение на элемент в таблице меток
30    pflabel   curlabel;   //Текущий элемент в таблице меток
31 
32    out_add2uint( cmd, 0 );
33 
34    off = fd.blabels.use;
35    curlabel = (pflabel)buf_appendtype( &fd.blabels, sizeof( flabel ));   
36 
37    curlabel->type = flag;
38    curlabel->offbout = fd.bout->use - sizeof( uint );
39    curlabel->link = link;
40    return off;
41 }
42 
43 /*-----------------------------------------------------------------------------
44 *
45 * ID: j_label 07.02.06 0.0.A.
46 *
47 * Summary: Добавление метки в таблицу меток
48 *
49 -----------------------------------------------------------------------------*/
50 uint STDCALL j_label( uint flag, uint link )
51 {
52    uint      off;        //Смещение на элемент в таблице меток
53    pflabel   curlabel;   //Текущий элемент в таблице меток
54 
55    off = fd.blabels.use;
56    curlabel = (pflabel)buf_appendtype( &fd.blabels, sizeof( flabel ));
57 
58    curlabel->type = flag;
59    curlabel->offbout = fd.bout->use;
60    curlabel->link = link;
61    return off;
62 }
63 
64 /*-----------------------------------------------------------------------------
65 *
66 * ID: j_correct 07.02.06 0.0.A.
67 *
68 * Summary: Корректировка последовательности переходов
69 *
70 -----------------------------------------------------------------------------*/
71 void STDCALL j_correct( uint curoff, uint link )
72 {
73    pflabel   curlabel;   // Текущий элемент в таблице меток
74    while ( curoff != -1 )
75    {
76       curlabel = (pflabel)( fd.blabels.data + curoff );
77       curoff = curlabel->link;
78       curlabel->link = link;
79    }
80 }
81 
Редактировать