/* * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code 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 * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ package org.visage.tools.code; import static com.sun.tools.mjavac.code.Flags.*; /** * Some Visage-specific flags for {@code Symbols}'s {@code flags_field}. * * @author Robert Field * @author Per Bothner * @author Lubo Litchev */ public class VisageFlags { private VisageFlags() {} private static final long LAST_JAVA_FLAG = PROPRIETARY; // Explicit (parser set) modifier flags private static final long FIRST_VISAGE_MOD_FLAG = LAST_JAVA_FLAG << 1; public static final long BOUND = FIRST_VISAGE_MOD_FLAG << 0; // bound function public static final long DEFAULT = FIRST_VISAGE_MOD_FLAG << 1; // default var public static final long OVERRIDE = FIRST_VISAGE_MOD_FLAG << 2; // overridden function public static final long IS_DEF = FIRST_VISAGE_MOD_FLAG << 3; // 'def' variable public static final long PUBLIC_READ = FIRST_VISAGE_MOD_FLAG << 4; // public-read var public static final long PUBLIC_INIT = FIRST_VISAGE_MOD_FLAG << 5; // public-init var public static final long PACKAGE_ACCESS = FIRST_VISAGE_MOD_FLAG << 6; // explicit 'package' access public static final long MIXIN = FIRST_VISAGE_MOD_FLAG << 7; // this is a mixin class // a couple of synthetic modifier flags public static final long SCRIPT_PRIVATE = FIRST_VISAGE_MOD_FLAG << 8; // implicily set flag if public/protected/package are not public static final long SCRIPT_LEVEL_SYNTH_STATIC = FIRST_VISAGE_MOD_FLAG << 9; // STATIC bit has been set implicitly public static final long OBJ_LIT_INIT = FIRST_VISAGE_MOD_FLAG << 10; private static final long LAST_VISAGE_MOD_FLAG = OBJ_LIT_INIT; // Flags on vars to inform translation private static final long FIRST_VARMARK_FLAG = LAST_VISAGE_MOD_FLAG << 1; public static final long VARMARK_BARE_SYNTH = FIRST_VARMARK_FLAG << 0; // synthetic that should only have field and invalidate generated for it (no accessors) private static final long LAST_VARMARK_FLAG = VARMARK_BARE_SYNTH; // Var/def usage info -- all usage info is within the script only private static final long FIRST_VARUSE_FLAG = LAST_VARMARK_FLAG << 1; public static final long VARUSE_HAS_REPLACE_TRIGGER = FIRST_VARUSE_FLAG << 0; // has 'on replace' either in definition or override public static final long VARUSE_BOUND_INIT = FIRST_VARUSE_FLAG << 1; // defined as bound, initially, in obj lit, or override public static final long VARUSE_ASSIGNED_TO = FIRST_VARUSE_FLAG << 2; // assigned ("=") to public static final long VARUSE_OBJ_LIT_INIT = FIRST_VARUSE_FLAG << 3; // initialized in an obj lit, bound or not public static final long VARUSE_FORWARD_REFERENCE = FIRST_VARUSE_FLAG << 4; // used before referenced public static final long VARUSE_SELF_REFERENCE = FIRST_VARUSE_FLAG << 5; // the initializing expression references the var public static final long VARUSE_OPT_TRIGGER = FIRST_VARUSE_FLAG << 6; // for newElements in trigger: no usage except indexing or sizeof public static final long VARUSE_TMP_IN_INIT_EXPR = FIRST_VARUSE_FLAG << 7; // temp flag, set while inside var's initializing expression public static final long VARUSE_NEED_ACCESSOR = FIRST_VARUSE_FLAG << 8; // create accessor methods for this var public static final long VARUSE_NON_LITERAL = FIRST_VARUSE_FLAG << 9; // non-accessor still needs getter public static final long VARUSE_BIND_ACCESS = FIRST_VARUSE_FLAG << 10; // Accessed in bind. public static final long VARUSE_VARREF = FIRST_VARUSE_FLAG << 11; // Used in VarRef public static final long VARUSE_SPECIAL = FIRST_VARUSE_FLAG << 12; // Ignore in varuse analysis. // WARNING - NO MORE BITS // This last shift + the last for modifiers + the last on marks must be <= 25 or we get overflow // Function flags -- reuse same bits as VARUSE* flags private static final long FIRST_VISAGE_FUNC_FLAG = LAST_VISAGE_MOD_FLAG << 1; public static final long FUNC_IS_BUILTINS_SYNTH = FIRST_VISAGE_FUNC_FLAG << 1; // This is a synthetic builtin function (isInitialized or isBound) public static final long FUNC_POINTER_MAKE = FIRST_VISAGE_FUNC_FLAG << 2; // This is the special Pointer.make() function public static final long FUNC_SYNTH_LOCAL_DOIT = FIRST_VISAGE_FUNC_FLAG << 3; // Synthetic function holding a local context // Class flags -- reuse same bits as VARUSE* flags private static final long FIRST_VISAGE_CLASS_FLAG = LAST_VISAGE_MOD_FLAG << 1; public static final long VISAGE_CLASS = FIRST_VISAGE_CLASS_FLAG << 1; // Visage class public static final long CLASS_HAS_INIT_BLOCK = FIRST_VISAGE_CLASS_FLAG << 2; // there is an init block on the class public static final long VISAGE_BOUND_FUNCTION_CLASS = FIRST_VISAGE_CLASS_FLAG << 3; // This is a local class that implements bound functions public static final long VisageAccessFlags = PUBLIC | PROTECTED | PRIVATE | SCRIPT_PRIVATE; public static final long VisageExplicitAccessFlags = PUBLIC | PROTECTED | PRIVATE | PACKAGE_ACCESS; public static final long VisageUserFlags = VisageExplicitAccessFlags | MIXIN | STATIC | ABSTRACT | BOUND | OVERRIDE | DEFAULT | PUBLIC_READ | PUBLIC_INIT; public static final long VisageLocalVarFlags = PARAMETER; public static final long VisageInstanceVarFlags = VisageExplicitAccessFlags | DEFAULT | PUBLIC_READ | PUBLIC_INIT; public static final long VisageAllInstanceVarFlags = VisageExplicitAccessFlags | DEFAULT | PUBLIC_READ | PUBLIC_INIT | SCRIPT_PRIVATE; public static final long VisageScriptVarFlags = VisageExplicitAccessFlags | STATIC | PUBLIC_READ; public static final long VisageMemberDefFlags = VisageExplicitAccessFlags | STATIC | PUBLIC_READ; public static final long VisageFunctionFlags = VisageExplicitAccessFlags | ABSTRACT | BOUND | OVERRIDE; public static final long VisageScriptFunctionFlags = VisageExplicitAccessFlags | STATIC | BOUND; public static final long VisageClassFlags = VisageExplicitAccessFlags | MIXIN | STATIC | ABSTRACT; }