/* * Copyright (c) 1998-2011 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * Free SoftwareFoundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * * @author Scott Ferguson */ package com.caucho.es.parser; import com.caucho.es.ESBase; import com.caucho.es.ESId; import java.util.HashMap; /** * Expr is an intermediate form representing an expression. */ class TypeExpr extends Expr { private static HashMap types; private static ESId CAUCHO = ESId.intern("caucho"); private static ESId JAVA = ESId.intern("java"); private static ESId PACKAGES = ESId.intern("Packages"); private ESId id; protected String _typeName; TypeExpr(Block block, ESId id) { super(block); this.id = id; Type type = (Type) types.get(id); if (type != null) { this.type = type.jsType; _typeName = type._name; javaType = type.javaClass; } else { this.type = TYPE_ES; _typeName = "com.caucho.es.ESBase"; javaType = ESBase.class; } } static TypeExpr create(Block block, ESId id) { if (id == CAUCHO) return new JavaTypeExpr(block, "com.caucho"); else if (id == JAVA) return new JavaTypeExpr(block, "java"); else if (id == PACKAGES) return new JavaTypeExpr(block, ""); else return new TypeExpr(block, id); } String getTypeName() { return _typeName; } /** * Returns a debugging string. */ public String toString() { return "TypeExpr[" + javaType + " " + type + "]"; } /** * Representation of the primitive types. */ static class Type { ESId id; int jsType; String _name; Class javaClass; Type(ESId id, int jsType, Class cl) { this.id = id; this.jsType = jsType; _name = cl.getName(); this.javaClass = cl; } } static { types = new HashMap(); types.put(ESId.intern("boolean"), new Type(ESId.intern("boolean"), TYPE_BOOLEAN, boolean.class)); types.put(ESId.intern("byte"), new Type(ESId.intern("byte"), TYPE_INTEGER, byte.class)); types.put(ESId.intern("short"), new Type(ESId.intern("short"), TYPE_INTEGER, short.class)); types.put(ESId.intern("int"), new Type(ESId.intern("int"), TYPE_INTEGER, int.class)); types.put(ESId.intern("long"), new Type(ESId.intern("long"), TYPE_LONG, long.class)); types.put(ESId.intern("float"), new Type(ESId.intern("float"), TYPE_NUMBER, float.class)); types.put(ESId.intern("double"), new Type(ESId.intern("double"), TYPE_NUMBER, double.class)); types.put(ESId.intern("String"), new Type(ESId.intern("String"), TYPE_STRING, String.class)); } }