* src/vm/builtin.c: Moved to .cpp.
[cacao.git] / src / vm / builtintable.inc
diff --git a/src/vm/builtintable.inc b/src/vm/builtintable.inc
deleted file mode 100644 (file)
index 3280f02..0000000
+++ /dev/null
@@ -1,1109 +0,0 @@
-/* src/vm/builtintable.inc - tables of builtin functions
-
-   Copyright (C) 1996-2005, 2006, 2007, 2008
-   CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
-
-   This file is part of CACAO.
-
-   This program 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, or (at
-   your option) any later version.
-
-   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, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.
-
-*/
-
-
-#include "config.h"
-
-#include "arch.h"
-
-#include "threads/lock-common.h"
-
-#include "vm/builtin.h"
-
-#include "vm/jit/jit.hpp"
-
-
-/* internal and not automatically replaced functions **************************/
-
-static builtintable_entry builtintable_internal[] = {
-
-#if defined(__ALPHA__) || defined(DISABLE_GC)
-       {
-               ICMD_F2L,
-               0,
-               BUILTIN_f2l,
-               NULL,
-               NULL,
-               "f2l",
-               "(F)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_D2L,
-               0,
-               BUILTIN_d2l,
-               NULL,
-               NULL,
-               "d2l",
-               "(D)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_F2I,
-               0,
-               BUILTIN_f2i,
-               NULL,
-               NULL,
-               "f2i",
-               "(F)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_D2I,
-               0,
-               BUILTIN_d2i,
-               NULL,
-               NULL,
-               "d2i",
-               "(D)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-#if !SUPPORT_DIVISION || defined(DISABLE_GC)
-       {
-               ICMD_IDIV,
-               0,
-               BUILTIN_idiv,
-               NULL,
-               NULL,
-               "idiv",
-               "(II)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_IREM,
-               0,
-               BUILTIN_irem,
-               NULL,
-               NULL,
-               "irem",
-               "(II)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-#if !(SUPPORT_DIVISION && SUPPORT_LONG && SUPPORT_LONG_DIV) || defined(DISABLE_GC)
-       {
-               ICMD_LDIV,
-               0,
-               BUILTIN_ldiv,
-               NULL,
-               NULL,
-               "ldiv",
-               "(JJ)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_LREM,
-               0,
-               BUILTIN_lrem,
-               NULL,
-               NULL,
-               "lrem",
-               "(JJ)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-       {
-               ICMD_FREM,
-               0,
-               BUILTIN_frem,
-               NULL,
-               NULL,
-               "frem",
-               "(FF)F",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_DREM,
-               0,
-               BUILTIN_drem,
-               NULL,
-               NULL,
-               "drem",
-               "(DD)D",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-
-
-       /* internal functions *****************************************************/
-
-       {
-               ICMD_NEW,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_new,
-               NULL,
-               NULL,
-               "new",
-               "(Ljava/lang/Class;)Ljava/lang/Object;",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-
-#if defined(ENABLE_TLH)
-       {
-               ICMD_NEW,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_tlh_new,
-               NULL,
-               NULL,
-               "tlh_new",
-               "(Ljava/lang/Class;)Ljava/lang/Object;",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-#if defined(ENABLE_ESCAPE_REASON)
-       {
-               ICMD_NEW,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_escape_reason_new,
-               NULL,
-               NULL,
-               "escape_reason_new",
-               "(Ljava/lang/Class;)Ljava/lang/Object;",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-       {
-               ICMD_NEW,
-               0,
-               BUILTIN_FAST_new,
-               NULL,
-               NULL,
-               "fast-new",
-               "(Ljava/lang/Class;)Ljava/lang/Object;",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_ANEWARRAY,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_newarray,
-               NULL,
-               NULL,
-               "newarray",
-               "(ILjava/lang/Class;)[Ljava/lang/Object;",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_NEWARRAY,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_newarray_boolean,
-               NULL,
-               NULL,
-               "newarray_boolean",
-               "(I)[Z",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_NEWARRAY,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_newarray_byte,
-               NULL,
-               NULL,
-               "newarray_byte",
-               "(I)[B",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_NEWARRAY,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_newarray_char,
-               NULL,
-               NULL,
-               "newarray_char",
-               "(I)[C",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_NEWARRAY,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_newarray_short,
-               NULL,
-               NULL,
-               "newarray_short",
-               "(I)[S",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_NEWARRAY,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_newarray_int,
-               NULL,
-               NULL,
-               "newarray_int",
-               "(I)[I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_NEWARRAY,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_newarray_long,
-               NULL,
-               NULL,
-               "newarray_long",
-               "(I)[J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_NEWARRAY,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_newarray_float,
-               NULL,
-               NULL,
-               "newarray_float",
-               "(I)[F",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_NEWARRAY,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_newarray_double,
-               NULL,
-               NULL,
-               "newarray_double",
-               "(I)[D",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_MULTIANEWARRAY,
-               BUILTINTABLE_FLAG_STUB,
-               BUILTIN_multianewarray,
-               NULL,
-               NULL,
-               "multianewarray",
-               /* XXX it should be: "(ILjava/lang/Class;[I)[Ljava/lang/Object;", */
-               "(ILjava/lang/Class;I)[Ljava/lang/Object;",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_CHECKCAST,
-               0,
-               BUILTIN_arraycheckcast,
-               NULL,
-               NULL,
-               "arraycheckcast",
-               "([Ljava/lang/Object;[Ljava/lang/Object;)[Ljava/lang/Object;",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_INSTANCEOF,
-               0,
-               BUILTIN_arrayinstanceof,
-               NULL,
-               NULL,
-               "arrayinstanceof",
-               "([Ljava/lang/Object;[Ljava/lang/Object;)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_AASTORE,
-               0,
-               BUILTIN_FAST_canstore,
-               NULL,
-               NULL,
-               "fast-canstore",
-               "([Ljava/lang/Object;Ljava/lang/Object;)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-
-#if defined(ENABLE_THREADS)
-       {
-               ICMD_MONITORENTER,
-               BUILTINTABLE_FLAG_STUB,
-               LOCK_monitor_enter,
-               NULL,
-               NULL,
-               "monitorenter",
-               "(Ljava/lang/Object;)V",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_MONITOREXIT,
-               BUILTINTABLE_FLAG_STUB,
-               LOCK_monitor_exit,
-               NULL,
-               NULL,
-               "monitorexit",
-               "(Ljava/lang/Object;)V",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-
-       /* stop entry */
-
-       {
-               255,
-               0,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-};
-
-
-/* automatically replaced functions *******************************************/
-
-static builtintable_entry builtintable_automatic[] = {
-
-#if !(SUPPORT_LONG && SUPPORT_LONG_CMP)
-       {
-               ICMD_LCMP,
-               0,
-               BUILTIN_lcmp,
-               NULL,
-               NULL,
-               "lcmp",
-               "(JJ)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-#if !(SUPPORT_LONG && SUPPORT_LONG_LOGICAL)
-       {
-               ICMD_LAND,
-               0,
-               BUILTIN_land,
-               NULL,
-               NULL,
-               "land",
-               "(JJ)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_LOR,
-               0,
-               BUILTIN_lor,
-               NULL,
-               NULL,
-               "lor",
-               "(JJ)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_LXOR,
-               0,
-               BUILTIN_lxor,
-               NULL,
-               NULL,
-               "lxor",
-               "(JJ)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif /* !(SUPPORT_LONG && SUPPORT_LONG_LOGICAL) */
-
-#if !(SUPPORT_LONG && SUPPORT_LONG_SHIFT)
-       {
-               ICMD_LSHL,
-               0,
-               BUILTIN_lshl,
-               NULL,
-               NULL,
-               "lshl",
-               "(JI)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_LSHR,
-               0,
-               BUILTIN_lshr,
-               NULL,
-               NULL,
-               "lshr",
-               "(JI)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_LUSHR,
-               0,
-               BUILTIN_lushr,
-               NULL,
-               NULL,
-               "lushr",
-               "(JI)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif /* !(SUPPORT_LONG && SUPPORT_LONG_SHIFT) */
-
-#if !(SUPPORT_LONG && SUPPORT_LONG_ADD)
-       {
-               ICMD_LADD,
-               0,
-               BUILTIN_ladd,
-               NULL,
-               NULL,
-               "ladd",
-               "(JJ)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_LSUB,
-               0,
-               BUILTIN_lsub,
-               NULL,
-               NULL,
-               "lsub",
-               "(JJ)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_LNEG,
-               0,
-               BUILTIN_lneg,
-               NULL,
-               NULL,
-               "lneg",
-               "(J)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif /* !(SUPPORT_LONG && SUPPORT_LONG_ADD) */
-
-#if !(SUPPORT_LONG && SUPPORT_LONG_MUL)
-       {
-               ICMD_LMUL,
-               0,
-               BUILTIN_lmul,
-               NULL,
-               NULL,
-               "lmul",
-               "(JJ)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-#if !(SUPPORT_FLOAT && SUPPORT_I2F)
-       {
-               ICMD_I2F,
-               0,
-               BUILTIN_i2f,
-               NULL,
-               NULL,
-               "i2f",
-               "(I)F",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-#if !(SUPPORT_DOUBLE && SUPPORT_I2D)
-       {
-               ICMD_I2D,
-               0,
-               BUILTIN_i2d,
-               NULL,
-               NULL,
-               "i2d",
-               "(I)D",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-#if !(SUPPORT_LONG && SUPPORT_FLOAT && SUPPORT_L2F)
-       {
-               ICMD_L2F,
-               0,
-               BUILTIN_l2f,
-               NULL,
-               NULL,
-               "l2f",
-               "(J)F",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-#if !(SUPPORT_LONG && SUPPORT_DOUBLE && SUPPORT_L2D)
-       {
-               ICMD_L2D,
-               0,
-               BUILTIN_l2d,
-               NULL,
-               NULL,
-               "l2d",
-               "(J)D",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-#if !(SUPPORT_FLOAT && SUPPORT_F2I)
-       {
-               ICMD_F2I,
-               0,
-               BUILTIN_f2i,
-               NULL,
-               NULL,
-               "f2i",
-               "(F)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-#if !(SUPPORT_FLOAT && SUPPORT_LONG && SUPPORT_F2L)
-       {
-               ICMD_F2L,
-               0,
-               BUILTIN_f2l,
-               NULL,
-               NULL,
-               "f2l",
-               "(F)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-#if !(SUPPORT_DOUBLE && SUPPORT_D2I)
-       {
-               ICMD_D2I,
-               0,
-               BUILTIN_d2i,
-               NULL,
-               NULL,
-               "d2i",
-               "(D)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-#if !(SUPPORT_DOUBLE && SUPPORT_LONG && SUPPORT_D2L)
-       {
-               ICMD_D2L,
-               0,
-               BUILTIN_d2l,
-               NULL,
-               NULL,
-               "d2l",
-               "(D)J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-
-       /* float functions ********************************************************/
-
-#if !SUPPORT_FLOAT
-       {
-               ICMD_FADD,
-               0,
-               BUILTIN_fadd,
-               NULL,
-               NULL,
-               "fadd",
-               "(FF)F",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_FSUB,
-               0,
-               BUILTIN_fsub,
-               NULL,
-               NULL,
-               "fsub",
-               "(FF)F",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_FMUL,
-               0,
-               BUILTIN_fmul,
-               NULL,
-               NULL,
-               "fmul",
-               "(FF)F",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_FDIV,
-               0,
-               BUILTIN_fdiv,
-               NULL,
-               NULL,
-               "fdiv",
-               "(FF)F",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_FNEG,
-               0,
-               BUILTIN_fneg,
-               NULL,
-               NULL,
-               "fneg",
-               "(F)F",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif /* !SUPPORT_FLOAT */
-
-#if !SUPPORT_FLOAT || !SUPPORT_FLOAT_CMP
-       {
-               ICMD_FCMPL,
-               0,
-               BUILTIN_fcmpl,
-               NULL,
-               NULL,
-               "fcmpl",
-               "(FF)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_FCMPG,
-               0,
-               BUILTIN_fcmpg,
-               NULL,
-               NULL,
-               "fcmpg",
-               "(FF)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif /* !SUPPORT_FLOAT || !SUPPORT_FLOAT_CMP */
-
-
-       /* double functions *******************************************************/
-
-#if !SUPPORT_DOUBLE
-       {
-               ICMD_DADD,
-               0,
-               BUILTIN_dadd,
-               NULL,
-               NULL,
-               "dadd",
-               "(DD)D",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_DSUB,
-               0,
-               BUILTIN_dsub,
-               NULL,
-               NULL,
-               "dsub",
-               "(DD)D",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_DMUL,
-               0,
-               BUILTIN_dmul,
-               NULL,
-               NULL,
-               "dmul",
-               "(DD)D",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_DDIV,
-               0,
-               BUILTIN_ddiv,
-               NULL,
-               NULL,
-               "ddiv",
-               "(DD)D",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_DNEG,
-               0,
-               BUILTIN_dneg,
-               NULL,
-               NULL,
-               "dneg",
-               "(D)D",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif /* !SUPPORT_DOUBLE */
-
-#if !SUPPORT_DOUBLE || !SUPPORT_DOUBLE_CMP
-       {
-               ICMD_DCMPL,
-               0,
-               BUILTIN_dcmpl,
-               NULL,
-               NULL,
-               "dcmpl",
-               "(DD)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_DCMPG,
-               0,
-               BUILTIN_dcmpg,
-               NULL,
-               NULL,
-               "dcmpg",
-               "(DD)I",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif /* !SUPPORT_DOUBLE || !SUPPORT_DOUBLE_CMP */
-
-
-       /* float/double functions *************************************************/
-
-#if !(SUPPORT_FLOAT && SUPPORT_DOUBLE)
-       {
-               ICMD_F2D,
-               0,
-               BUILTIN_f2d,
-               NULL,
-               NULL,
-               "f2d",
-               "(F)D",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-       {
-               ICMD_D2F,
-               0,
-               BUILTIN_d2f,
-               NULL,
-               NULL,
-               "d2f",
-               "(D)F",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif /* !(SUPPORT_FLOAT && SUPPORT_DOUBLE) */
-
-
-       /* prevent a compiler warning if everything is supported (e.g. i386) */
-
-       {
-               255,
-               0,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-};
-
-
-/* automatically replaced functions *******************************************/
-
-static builtintable_entry builtintable_function[] = {
-#if defined(ENABLE_JIT)
-
-       /* java.lang.VMSystem.arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V STATIC NATIVE */
-
-       {
-               ICMD_BUILTIN,
-               BUILTINTABLE_FLAG_STUB | BUILTINTABLE_FLAG_EXCEPTION,
-               BUILTIN_arraycopy,
-               NULL,
-               "java/lang/VMSystem",
-               "arraycopy",
-               "(Ljava/lang/Object;ILjava/lang/Object;II)V",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-
-       /* java.lang.System.arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V PUBLIC STATIC */
-
-#if 0
-       /* We disable this one until we have a fix for the stacktrace
-          issue. */
-
-       {
-               ICMD_BUILTIN,
-               BUILTINTABLE_FLAG_STUB | BUILTINTABLE_FLAG_EXCEPTION,
-               BUILTIN_arraycopy,
-               NULL,
-               "java/lang/System",
-               "arraycopy",
-               "(Ljava/lang/Object;ILjava/lang/Object;II)V",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-#endif
-
-       /* java.lang.VMSystem.currentTimeMillis()J PUBLIC STATIC */
-
-       {
-               ICMD_BUILTIN,
-               0,
-               BUILTIN_currenttimemillis,
-               NULL,
-               "java/lang/VMSystem",
-               "currentTimeMillis",
-               "()J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-
-       /* java.lang.System.currentTimeMillis()J PUBLIC STATIC */
-
-       {
-               ICMD_BUILTIN,
-               0,
-               BUILTIN_currenttimemillis,
-               NULL,
-               "java/lang/System",
-               "currentTimeMillis",
-               "()J",
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-
-#endif /* defined(ENABLE_JIT) */
-
-       /* stop entry */
-
-       {
-               255,
-               0,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL
-       },
-};
-
-
-/*
- * These are local overrides for various environment variables in Emacs.
- * Please do not remove this and leave it at the end of the file, where
- * Emacs will automagically detect them.
- * ---------------------------------------------------------------------
- * Local variables:
- * mode: c
- * indent-tabs-mode: t
- * c-basic-offset: 4
- * tab-width: 4
- * End:
- * vim:noexpandtab:sw=4:ts=4:
- */