sourcepawn/compiler/scvars.c
author David Anderson <dvander@alliedmods.net>
Wed Jul 19 09:58:18 2006 +0000 (2006-07-19)
changeset 31 071b73cfcc65
parent 27 764c6dd3dc25
child 52 97bdc78041aa
permissions -rw-r--r--
added debug information output
revised file format to make compression global
dvander@27
     1
/*  Pawn compiler
dvander@27
     2
 *
dvander@27
     3
 *  Global (cross-module) variables.
dvander@27
     4
 *
dvander@27
     5
 *  Copyright (c) ITB CompuPhase, 1997-2006
dvander@27
     6
 *
dvander@27
     7
 *  This software is provided "as-is", without any express or implied warranty.
dvander@27
     8
 *  In no event will the authors be held liable for any damages arising from
dvander@27
     9
 *  the use of this software.
dvander@27
    10
 *
dvander@27
    11
 *  Permission is granted to anyone to use this software for any purpose,
dvander@27
    12
 *  including commercial applications, and to alter it and redistribute it
dvander@27
    13
 *  freely, subject to the following restrictions:
dvander@27
    14
 *
dvander@27
    15
 *  1.  The origin of this software must not be misrepresented; you must not
dvander@27
    16
 *      claim that you wrote the original software. If you use this software in
dvander@27
    17
 *      a product, an acknowledgment in the product documentation would be
dvander@27
    18
 *      appreciated but is not required.
dvander@27
    19
 *  2.  Altered source versions must be plainly marked as such, and must not be
dvander@27
    20
 *      misrepresented as being the original software.
dvander@27
    21
 *  3.  This notice may not be removed or altered from any source distribution.
dvander@27
    22
 *
dvander@27
    23
 *  Version: $Id: scvars.c 3577 2006-06-02 16:22:52Z thiadmer $
dvander@27
    24
 */
dvander@27
    25
#include <stdio.h>
dvander@27
    26
#include <stdlib.h>     /* for _MAX_PATH */
dvander@27
    27
#include "sc.h"
dvander@27
    28
dvander@27
    29
/*  global variables
dvander@27
    30
 *
dvander@27
    31
 *  All global variables that are shared amongst the compiler files are
dvander@27
    32
 *  declared here.
dvander@27
    33
 */
dvander@27
    34
SC_VDEFINE symbol loctab;                   /* local symbol table */
dvander@27
    35
SC_VDEFINE symbol glbtab;                   /* global symbol table */
dvander@27
    36
SC_VDEFINE cell *litq;                      /* the literal queue */
dvander@27
    37
SC_VDEFINE unsigned char pline[sLINEMAX+1]; /* the line read from the input file */
dvander@27
    38
SC_VDEFINE const unsigned char *lptr;       /* points to the current position in "pline" */
dvander@27
    39
SC_VDEFINE constvalue tagname_tab = { NULL, "", 0, 0};  /* tagname table */
dvander@27
    40
SC_VDEFINE constvalue libname_tab = { NULL, "", 0, 0};  /* library table (#pragma library "..." syntax) */
dvander@27
    41
SC_VDEFINE constvalue *curlibrary = NULL;   /* current library */
dvander@27
    42
SC_VDEFINE int pc_addlibtable = TRUE;       /* is the library table added to the AMX file? */
dvander@27
    43
SC_VDEFINE symbol *curfunc;                 /* pointer to current function */
dvander@27
    44
SC_VDEFINE char *inpfname;                  /* pointer to name of the file currently read from */
dvander@27
    45
SC_VDEFINE char outfname[_MAX_PATH];        /* intermediate (assembler) file name */
dvander@27
    46
SC_VDEFINE char binfname[_MAX_PATH];        /* binary file name */
dvander@27
    47
SC_VDEFINE char errfname[_MAX_PATH];        /* error file name */
dvander@27
    48
SC_VDEFINE char sc_ctrlchar = CTRL_CHAR;    /* the control character (or escape character)*/
dvander@27
    49
SC_VDEFINE char sc_ctrlchar_org = CTRL_CHAR;/* the default control character */
dvander@27
    50
SC_VDEFINE int litidx    = 0;               /* index to literal table */
dvander@27
    51
SC_VDEFINE int litmax    = sDEF_LITMAX;     /* current size of the literal table */
dvander@27
    52
SC_VDEFINE int stgidx    = 0;      /* index to the staging buffer */
dvander@27
    53
SC_VDEFINE int sc_labnum = 0;      /* number of (internal) labels */
dvander@27
    54
SC_VDEFINE int staging   = 0;      /* true if staging output */
dvander@27
    55
SC_VDEFINE cell declared = 0;      /* number of local cells declared */
dvander@27
    56
SC_VDEFINE cell glb_declared=0;    /* number of global cells declared */
dvander@27
    57
SC_VDEFINE cell code_idx = 0;      /* number of bytes with generated code */
dvander@27
    58
SC_VDEFINE int ntv_funcid= 0;      /* incremental number of native function */
dvander@27
    59
SC_VDEFINE int errnum    = 0;      /* number of errors */
dvander@27
    60
SC_VDEFINE int warnnum   = 0;      /* number of warnings */
dvander@27
    61
SC_VDEFINE int sc_debug  = sCHKBOUNDS; /* by default: bounds checking+assertions */
dvander@27
    62
SC_VDEFINE int sc_packstr= FALSE;  /* strings are packed by default? */
dvander@27
    63
SC_VDEFINE int sc_asmfile= FALSE;  /* create .ASM file? */
dvander@27
    64
SC_VDEFINE int sc_listing= FALSE;  /* create .LST file? */
dvander@27
    65
SC_VDEFINE int sc_compress=TRUE;   /* compress bytecode? */
dvander@27
    66
SC_VDEFINE int sc_needsemicolon=TRUE;/* semicolon required to terminate expressions? */
dvander@27
    67
SC_VDEFINE int sc_dataalign=sizeof(cell);/* data alignment value */
dvander@27
    68
SC_VDEFINE int sc_alignnext=FALSE; /* must frame of the next function be aligned? */
dvander@27
    69
SC_VDEFINE int pc_docexpr=FALSE;   /* must expression be attached to documentation comment? */
dvander@27
    70
SC_VDEFINE int curseg    = 0;      /* 1 if currently parsing CODE, 2 if parsing DATA */
dvander@27
    71
SC_VDEFINE cell pc_stksize=sDEF_AMXSTACK;/* default stack size */
dvander@27
    72
SC_VDEFINE cell pc_amxlimit=0;     /* default abstract machine size limit = none */
dvander@27
    73
SC_VDEFINE cell pc_amxram=0;       /* default abstract machine data size limit = none */
dvander@27
    74
SC_VDEFINE int freading  = FALSE;  /* Is there an input file ready for reading? */
dvander@27
    75
SC_VDEFINE int fline     = 0;      /* the line number in the current file */
dvander@27
    76
SC_VDEFINE short fnumber = 0;      /* the file number in the file table (debugging) */
dvander@27
    77
SC_VDEFINE short fcurrent= 0;      /* current file being processed (debugging) */
dvander@27
    78
SC_VDEFINE short sc_intest=FALSE;  /* true if inside a test */
dvander@27
    79
SC_VDEFINE int sideeffect= 0;      /* true if an expression causes a side-effect */
dvander@27
    80
SC_VDEFINE int stmtindent= 0;      /* current indent of the statement */
dvander@27
    81
SC_VDEFINE int indent_nowarn=FALSE;/* skip warning "217 loose indentation" */
dvander@27
    82
SC_VDEFINE int sc_tabsize=8;       /* number of spaces that a TAB represents */
dvander@27
    83
SC_VDEFINE short sc_allowtags=TRUE;  /* allow/detect tagnames in lex() */
dvander@27
    84
SC_VDEFINE int sc_status;          /* read/write status */
dvander@27
    85
SC_VDEFINE int sc_rationaltag=0;   /* tag for rational numbers */
dvander@27
    86
SC_VDEFINE int rational_digits=0;  /* number of fractional digits */
dvander@27
    87
SC_VDEFINE int sc_allowproccall=0; /* allow/detect tagnames in lex() */
dvander@27
    88
SC_VDEFINE short sc_is_utf8=FALSE; /* is this source file in UTF-8 encoding */
dvander@27
    89
SC_VDEFINE char *pc_depricate=NULL;/* if non-null, mark next declaration as depricated */
dvander@27
    90
SC_VDEFINE int sc_curstates=0;     /* ID of the current state list */
dvander@27
    91
SC_VDEFINE int pc_optimize=sOPTIMIZE_NOMACRO; /* (peephole) optimization level */
dvander@27
    92
SC_VDEFINE int pc_memflags=0;      /* special flags for the stack/heap usage */
dvander@27
    93
dvander@27
    94
SC_VDEFINE constvalue sc_automaton_tab = { NULL, "", 0, 0}; /* automaton table */
dvander@27
    95
SC_VDEFINE constvalue sc_state_tab = { NULL, "", 0, 0};   /* state table */
dvander@27
    96
dvander@27
    97
SC_VDEFINE FILE *inpf    = NULL;   /* file read from (source or include) */
dvander@27
    98
SC_VDEFINE FILE *inpf_org= NULL;   /* main source file */
dvander@27
    99
SC_VDEFINE FILE *outf    = NULL;   /* (intermediate) text file written to */
dvander@27
   100
dvander@27
   101
SC_VDEFINE jmp_buf errbuf;
dvander@27
   102
dvander@27
   103
#if !defined SC_LIGHT
dvander@27
   104
  SC_VDEFINE int sc_makereport=FALSE; /* generate a cross-reference report */
dvander@27
   105
#endif
dvander@27
   106
dvander@27
   107
#if defined __WATCOMC__ && !defined NDEBUG
dvander@27
   108
  /* Watcom's CVPACK dislikes .OBJ files without functions */
dvander@27
   109
  static int dummyfunc(void)
dvander@27
   110
  {
dvander@27
   111
    return 0;
dvander@27
   112
  }
dvander@27
   113
#endif