Преглед изворни кода

new file to keep all limits and instalation-dependent definitions

Roberto Ierusalimschy пре 25 година
родитељ
комит
13578517c7
1 измењених фајлова са 185 додато и 0 уклоњено
  1. 185 0
      llimits.h

+ 185 - 0
llimits.h

@@ -0,0 +1,185 @@
+/*
+** $Id: $
+** Limits, basic types, and some other "instalation-dependent" definitions
+** See Copyright Notice in lua.h
+*/
+
+#ifndef llims_h
+#define llims_h
+
+
+#include <limits.h>
+
+
+/*
+** Define the type `number' of Lua
+** GREP LUA_NUMBER to change that
+*/
+#ifndef LUA_NUM_TYPE
+#define LUA_NUM_TYPE double
+#endif
+
+typedef LUA_NUM_TYPE Number;
+
+
+
+#define MAX_INT (INT_MAX-2)  /* maximum value of an int (-2 for safety) */
+
+/*
+** conversion of pointer to int (for hashing only)
+** (the shift removes bits that are usually 0 because of alignment)
+*/
+#define IntPoint(L, p)  (((unsigned long)(p)) >> 3)
+
+
+/*
+** number of `blocks' for garbage collection: each reference to other
+** objects count 1, and each 32 bytes of `raw' memory count 1; we add
+** 2 to the total as a minimum (and also to count the overhead of malloc)
+*/
+#define numblocks(L, o,b)       ((o)+((b)>>5)+2)
+
+
+#define MINPOWER2       4       /* minimum size for "growing" vectors */
+
+
+/*
+** type for virtual-machine instructions
+** must be an unsigned with 4 bytes (see details in lopcodes.h)
+** For a very small machine, you may change that to 2 bytes (and adjust
+** the following limits accordingly)
+*/
+typedef unsigned long Instruction;
+
+
+/*
+** limits for opcode arguments.
+** For an instruction with 2 bytes, size is 16, and size_b can be 5
+*/
+#define SIZE_INSTRUCTION        32
+#define SIZE_OP         6
+#define SIZE_B          9
+
+#define SIZE_U          (SIZE_INSTRUCTION-SIZE_OP)
+#define POS_U           SIZE_OP
+#define SIZE_S          (SIZE_INSTRUCTION-SIZE_OP)
+#define POS_S           SIZE_OP
+#define POS_B           SIZE_OP
+#define SIZE_A          (SIZE_INSTRUCTION-(SIZE_OP+SIZE_B))
+#define POS_A           (SIZE_OP+SIZE_B)
+
+#define MAXARG_U        ((1<<SIZE_U)-1)
+#define MAXARG_S        ((1<<(SIZE_S-1))-1)  /* `S' is signed */
+#define MAXARG_A        ((1<<SIZE_A)-1)
+#define MAXARG_B        ((1<<SIZE_B)-1)
+
+
+/*
+** we use int to manipulate most arguments, so they must fit
+*/
+#if MAXARG_U > MAX_INT
+#undef MAXARG_U
+#define MAXARG_U        MAX_INT
+#endif
+
+#if MAXARG_S > MAX_INT
+#undef MAXARG_S
+#define MAXARG_S        MAX_INT
+#endif
+
+#if MAXARG_A > MAX_INT
+#undef MAXARG_A
+#define MAXARG_A        MAX_INT
+#endif
+
+#if MAXARG_B > MAX_INT
+#undef MAXARG_B
+#define MAXARG_B        MAX_INT
+#endif
+
+
+/* maximum stack size in a function */
+#define MAXSTACK	MAXARG_B
+
+
+/* maximum number of local variables */
+#ifndef MAXLOCALS
+#define MAXLOCALS 200           /* arbitrary limit (<MAXSTACK) */
+#endif
+#if MAXLOCALS>=MAXSTACK
+#undef MAXLOCALS
+#define MAXLOCALS	(MAXSTACK-1)
+#endif
+
+
+/* maximum number of upvalues */
+#ifndef MAXUPVALUES
+#define MAXUPVALUES 32          /* arbitrary limit (<=MAXARG_B) */
+#endif
+#if MAXUPVALUES>MAXARG_B
+#undef MAXUPVALUES
+#define MAXUPVALUES	MAXARG_B
+#endif
+
+
+/* special code for multiple returns */
+#define MULT_RET        255	/* (<=MAXARG_B) */
+#if MULT_RET>MAXARG_B
+#undef MULT_RET
+#define MULT_RET	MAXARG_B
+#endif
+
+
+/* maximum number of variables in the left side of an assignment */
+#ifndef MAXVARSLH
+#define MAXVARSLH 100           /* arbitrary limit (<MULT_RET) */
+#endif
+#if MAXVARSLH>=MULT_RET
+#undef MAXVARSLH
+#define MAXVARSLH	(MULT_RET-1)
+#endif
+
+
+/* maximum number of parameters in a function */
+#ifndef MAXPARAMS
+#define MAXPARAMS 100           /* arbitrary limit (<MAXLOCALS) */
+#endif
+#if MAXPARAMS>=MAXLOCALS
+#undef MAXPARAMS
+#define MAXPARAMS	(MAXLOCALS-1)
+#endif
+
+
+/* number of list items to accumulate before a SETLIST instruction */
+#define LFIELDS_PER_FLUSH	(MAXSTACK/4)
+
+/* number of record items to accumulate before a SETMAP instruction */
+/* (each item counts 2 elements on the stack: an index and a value) */
+#define RFIELDS_PER_FLUSH	(LFIELDS_PER_FLUSH/2)
+
+
+/* maximum number of values printed in one call to `print' */
+#ifndef MAXPRINT
+#define MAXPRINT        40	/* arbitrary limit */
+#endif
+
+
+/* maximum depth of nested $ifs */
+#ifndef MAX_IFS
+#define MAX_IFS 5  /* arbitrary limit */
+#endif
+
+
+/* maximum size of a pragma line */
+#ifndef PRAGMASIZE
+#define PRAGMASIZE      80  /* arbitrary limit */
+#endif
+
+
+/* maximum lookback to find a real constant (for code generation) */
+#ifndef LOOKBACKNUMS
+#define LOOKBACKNUMS    20      /* arbitrary limit */
+#endif
+
+
+#endif