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: global 18.10.06 0.0.A.
11 *
12 * Author: Alexey Krivonogov ( gentee )
13 *
14 * Summary: global command
15 *
16 ******************************************************************************/
17 
18 #include "../genteeapi/gentee.h"
19 #include "bcodes.h"
20 #include "compile.h"
21 #include "../common/file.h"
22 
23 /*-----------------------------------------------------------------------------
24 *
25 * ID: global 22.11.06 0.0.A.
26 * 
27 * Summary: global command
28 *
29 -----------------------------------------------------------------------------*/
30 
31 plexem  STDCALL global( plexem plex )
32 {
33    s_descid  field;
34    pubyte    pout, pdata;
35    uint      isize;
36    uint      iflag, flag = GHCOM_NAME | ( _compile->cur->priv ? GHRT_PRIVATE : 0 );
37 
38    plex = lexem_next( plex, LEXNEXT_IGNLINE );
39 
40    field.flgdesc = DESCID_GLOBAL;
41    plex = lexem_next( plex, LEXNEXT_IGNLINE | LEXNEXT_LCURLY );
42 
43    field.idtype = 0;
44    while ( 1 )
45    {
46       plex = desc_nextidvar( plex, &field );
47       if ( !field.idtype )
48          break;
49 
50 //      if ( bc_getid( field.lex ))
51 //         msg( MRedefine | MSG_LEXNAMEERR, field.lex );
52       _vm.pos = field.lex->pos;
53 
54       out_init( OVM_GLOBAL, flag, field.name );
55       iflag = 0;
56       pdata = 0;
57       if ( field.oftype ) 
58          iflag |= VAR_OFTYPE;
59 
60       if ( field.msr ) 
61          iflag |= VAR_DIM;
62       if ( field.lexres )
63       {
64          iflag |= VAR_DATA;
65          if ( field.lexres->type == LEXEM_NUMBER )
66             pdata = ( pubyte )&field.lexres->num.vint;
67          else
68             pdata = ( pubyte )lexem_getstr( field.lexres );
69       }
70       out_addvar( &field, iflag, pdata );
71       
72       // Reserve space for variable data
73       isize = ((povmtype)PCMD(field.idtype))->size;
74       buf_expand( _compile->pout, isize );
75       _compile->pout->use += isize;
76 
77       pout = out_finish();
78       load_global( &pout );
79    }
80    if ( !lexem_isys( plex, LSYS_RCURLY ))
81       msg( MRcurly | MSG_LEXERR, plex );
82 
83    return plex;
84 }
85 
86 
Редактировать