root/src/VM/cil/cilVMConversion.cpp

Revision 138, 2.7 kB (checked in by hak, 6 months ago)

- Added CCilVm::reset()
- Fixed VM status management (ticket #5)
- Fixed API names not to have upper case as 1st letter.
- Fixed sample build break
- Added new sample, "vm_contol" to demonstrate VM status control API

Line 
1 /****************************************************************************
2  *
3  * CRI Middleware SDK
4  *
5  * Copyright (c) 2008 CRI Middleware, Inc. All rights reserved.
6  *
7  * Use, modification and distribution are subject to the CRI Script Software
8  * License, Version 1.0(see accompanying file "CriScript_License_1_0.txt" or
9  * copy at www.criscript.com/trac/wiki/CRI%20Script%20Software%20License%201.0 ).
10  *
11  *
12  * Library  : CRIScript
13  * Module   : cil Virtual Machine
14  * File     : cilVMConversion.cpp.cpp
15  * Date     :
16  * Version  :
17  *
18  ****************************************************************************/
19
20 /***************************************************************************
21  *      Include file
22  ***************************************************************************/
23 #include "stdafx.h"
24 #include "criScript.h"
25 #include "cilVM.h"
26 namespace cri {
27 /***************************************************************************
28  *      Variables
29  ***************************************************************************/
30
31 /***************************************************************************
32  *      Methods
33  ***************************************************************************/
34
35 /***************************************************************************
36  *      Boolean Conversion
37  ***************************************************************************/
38 void CCilVm::convertToBoolean()
39 {
40         CVariable& var = getEvalStackFirstEntry();
41         switch( OperandType( var.iOperandType ) )
42         {
43         case OPERAND_UNDEFINED:
44         case OPERAND_NULL:
45         case OPERAND_NAN:
46                 var.iOperandType = OPERAND_BOOLEAN;
47                 var.bValue = false;
48                 break;
49         case OPERAND_OBJECTREF:
50                 {
51                 bool b = var.refObject->getValue().toBoolean();
52                 if( var.refObject )
53                         var.refObject->release();
54                 var.iOperandType = OPERAND_BOOLEAN;
55                 var.bValue = b;
56                 var.bValue = true;
57                 }
58                 break;
59         case OPERAND_INT:
60         case OPERAND_UNSIGNEDINT:
61         case OPERAND_INT64:
62         case OPERAND_UNSIGNEDINT64:
63                 var.iOperandType = OPERAND_BOOLEAN;
64                 break;
65         case OPERAND_FLOAT:
66                 var.iOperandType = OPERAND_BOOLEAN;
67                 if( var.fValue == 0 )
68                         var.bValue = false;
69                 else
70                         var.bValue = true;
71                 break;
72         case OPERAND_DOUBLE:
73                 var.iOperandType = OPERAND_BOOLEAN;
74                 if( var.dValue == 0 )
75                         var.bValue = false;
76                 else
77                         var.bValue = true;
78                 break;
79         case OPERAND_STRING:
80                 var.iOperandType = OPERAND_BOOLEAN;
81                 if( !var.pString->size() )
82                 {
83                         delete( var.pString );
84                         var.bValue = false;
85                 }
86                 else
87                 {
88                         delete( var.pString );
89                         var.bValue = true;
90                 }
91                 break;
92         case OPERAND_BOOLEAN:
93                 //Do nothing
94                 break;
95         default:
96                 Debug_Fatal( "Unsupported Type conversion" );
97                 break;
98         }
99
100 }
101
102
103 } //namespace CRI
Note: See TracBrowser for help on using the browser.