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: with 16.02.07 0.0.A.
11 *
12 * Author: Alexander Krivonogov ( algen )
13 *
14 * Summary: The with statement
15 *
16 ******************************************************************************/
17
18 #include "func.h"
19
20 /*-----------------------------------------------------------------------------
21 *
22 * ID: c_with 16.02.07 0.0.A.
23 *
24 * Summary: The with processing
25 *
26 -----------------------------------------------------------------------------*/
27 plexem STDCALL c_with( plexem curlex )
28 {
29 uint objnum; //Номер дополнительной переменной хранящей объект
30 uint objtype; //Тип объекта
31 pfwith pwith;
32
33 //Обработка выражения-объекта
34 objnum = var_addtmp( TUint, 0 ); //Создание переменной для хранения адреса объекта
35 out_add2uint( CVarptrload, objnum );//Байт код для сохранения результата выражения
36 curlex = f_expr( curlex, EXPR_NONULL, &objtype, 0 );
37 out_adduint( CSetI );//Байт код загрузки значения
38
39 pwith = ( pfwith )buf_appendtype( &fd.bwith, sizeof( fwith ));
40 pwith->num = objnum;
41 pwith->type = objtype;
42 curlex = f_body( curlex );
43 fd.bwith.use -= sizeof( fwith );
44
45 return curlex;
46 }