/*
 * xtc - The eXTensible Compiler
 * Copyright (C) 2004-2006 Robert Grimm, New York University
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 * This program 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.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
 * USA.
 */

/**
 * Definition of Java type names.
 *
 * @author Robert Grimm
 * @author Stacey Kuznetsov
 * @version $Revision: 1.8 $
 */
module xtc.lang.JavaType(Identifier, Symbol);

import Identifier;
import Symbol;

Node ResultType =
    <Void>    VoidType
  / <Regular> Type
  ;

generic VoidType = <Void> void:"void":Word ;

variant generic Type =
  <Type> TypeName Dimensions?
  ;

variant Node TypeName =
    <Basic> PrimitiveType
  / <Class> ClassType
  ;

generic PrimitiveType =
    <Byte>    "byte":Word
  / <Short>   "short":Word
  / <Char>    "char":Word
  / <Int>     "int":Word
  / <Long>    "long":Word
  / <Float>   "float":Word
  / <Double>  "double":Word
  / <Boolean> "boolean":Word
  ;

transient Node ClassType =
  <Name> QualifiedIdentifier
  ;

generic Dimensions =
  ( "[":Symbol void:"]":Symbol )+
  ;
