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 }