001    package org.mesopotamia.lang.java;
002    
003    import org.mesopotamia.MesopotamiaException;
004    import org.mesopotamia.NodeData;
005    import org.mesopotamia.RepositoryLanguage;
006    import org.mesopotamia.Scan;
007    import org.mesopotamia.lang.java.ref.TypeInfo;
008    import org.mesopotamia.lang.java.ref.TypeSpecInfo;
009    
010    public class LongConstant extends Constant {
011    
012            public LongConstant(NodeData xData, Class<?> context, Scan scan,
013                            RepositoryLanguage language, Object environment) throws MesopotamiaException {
014                    super(xData, context, scan, language, environment);
015            }
016    
017            public long getValue() {
018                    String text = getText();
019                    if (text.toLowerCase().startsWith("0x")) {
020                            int lastCharIdx = text.length()-1;
021                        long ret=0;
022                        String digits=text.substring(2, text.charAt(lastCharIdx)=='L' ? lastCharIdx : text.length());
023                        for (int i=0; i<digits.length(); i++) {
024                            ret <<= 4;
025                            ret |= Character.digit(digits.charAt(i), 16);
026                        }
027                            return ret;
028                    }
029                    
030                    int lastCharIdx = text.length()-1;
031                    return java.lang.Long.parseLong(Character.toUpperCase(text.charAt(lastCharIdx))=='L' ? text.substring(0, lastCharIdx) : text);          
032            }
033    
034            @Override
035            public TypeSpecInfo getTypeSpecInfo() {
036                    return new TypeSpecInfo() {
037    
038                            public int getDimensions() {
039                                    return 0;
040                            }
041    
042                            public TypeInfo getTypeInfo() {
043                                    return Long.LONG_INFO;
044                            }
045                            
046                    };
047            }
048    }