Orb/Doxygen/src/cppvalue.cpp
changeset 0 42188c7ea2d9
child 4 468f4c8d3d5b
equal deleted inserted replaced
-1:000000000000 0:42188c7ea2d9
       
     1 /******************************************************************************
       
     2  *
       
     3  * 
       
     4  *
       
     5  *
       
     6  * Copyright (C) 1997-2008 by Dimitri van Heesch.
       
     7  *
       
     8  * Permission to use, copy, modify, and distribute this software and its
       
     9  * documentation under the terms of the GNU General Public License is hereby 
       
    10  * granted. No representations are made about the suitability of this software 
       
    11  * for any purpose. It is provided "as is" without express or implied warranty.
       
    12  * See the GNU General Public License for more details.
       
    13  *
       
    14  * Documents produced by Doxygen are derivative works derived from the
       
    15  * input used in their production; they are not affected by this license.
       
    16  *
       
    17  */
       
    18 
       
    19 #include <stdlib.h>
       
    20 
       
    21 #include "cppvalue.h"
       
    22 #include "constexp.h"
       
    23 
       
    24 CPPValue parseOctal()
       
    25 {
       
    26   long val = 0;
       
    27   for (const char *p = g_strToken.data(); *p != 0; p++)
       
    28   {
       
    29     if (*p >= '0' && *p <= '7') val = val * 8 + *p - '0';
       
    30   }
       
    31   return CPPValue(val);
       
    32 }
       
    33 
       
    34 CPPValue parseDecimal()
       
    35 {
       
    36   long val = 0;
       
    37   for (const char *p = g_strToken.data(); *p != 0; p++)
       
    38   {
       
    39     if (*p >= '0' && *p <= '9') val = val * 10 + *p - '0';
       
    40   }
       
    41   return CPPValue(val);
       
    42 }
       
    43 
       
    44 CPPValue parseHexadecimal()
       
    45 {
       
    46   long val = 0;
       
    47   for (const char *p = g_strToken.data(); *p != 0; p++)
       
    48   {
       
    49     if      (*p >= '0' && *p <= '9') val = val * 16 + *p - '0';
       
    50     else if (*p >= 'a' && *p <= 'f') val = val * 16 + *p - 'a' + 10;
       
    51     else if (*p >= 'A' && *p <= 'F') val = val * 16 + *p - 'A' + 10;
       
    52   }
       
    53   //printf("parseHexadecimal %s->%x\n",g_strToken.data(),val);
       
    54   return CPPValue(val);
       
    55 }
       
    56 
       
    57 CPPValue parseCharacter() // does not work for '\n' and the alike 
       
    58 {
       
    59   if (g_strToken[1]=='\\')
       
    60   {
       
    61     switch(g_strToken[2])
       
    62     {
       
    63       case 'n':  return CPPValue((long)'\n');
       
    64       case 't':  return CPPValue((long)'\t');
       
    65       case 'v':  return CPPValue((long)'\v');
       
    66       case 'b':  return CPPValue((long)'\b');
       
    67       case 'r':  return CPPValue((long)'\r');
       
    68       case 'f':  return CPPValue((long)'\f');
       
    69       case 'a':  return CPPValue((long)'\a');
       
    70       case '\\': return CPPValue((long)'\\');
       
    71       case '?':  return CPPValue((long)'\?');
       
    72       case '\'': return CPPValue((long)'\'');
       
    73       case '"':  return CPPValue((long)'"');
       
    74       case '0':  // fall through
       
    75       case '1':  // fall through
       
    76       case '2':  // fall through
       
    77       case '3':  // fall through
       
    78       case '4':  // fall through
       
    79       case '5':  // fall through
       
    80       case '6':  // fall through
       
    81       case '7':  // fall through
       
    82                  return parseOctal();
       
    83       case 'x': 
       
    84       case 'X':  return parseHexadecimal();
       
    85       default:   printf("Invalid escape sequence %s found!\n",g_strToken.data()); 
       
    86                  return CPPValue(0L); 
       
    87     }
       
    88   }
       
    89   return CPPValue((long)g_strToken[1]);
       
    90 }
       
    91 
       
    92 CPPValue parseFloat()
       
    93 {
       
    94   return CPPValue(atof(g_strToken));
       
    95 }