mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2024-11-30 08:24:11 +01:00
194 lines
4.8 KiB
C
194 lines
4.8 KiB
C
|
/*
|
||
|
# This file is Copyright 2003, 2006, 2007, 2009, 2010 Dean Hall.
|
||
|
#
|
||
|
# This file is part of the PyMite VM.
|
||
|
# The PyMite VM is free software: you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU GENERAL PUBLIC LICENSE Version 2.
|
||
|
#
|
||
|
# The PyMite VM 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.
|
||
|
# A copy of the GNU GENERAL PUBLIC LICENSE Version 2
|
||
|
# is seen in the file COPYING in this directory.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef __GLOBAL_H__
|
||
|
#define __GLOBAL_H__
|
||
|
|
||
|
|
||
|
/**
|
||
|
* \file
|
||
|
* \brief VM Globals
|
||
|
*
|
||
|
* VM globals header.
|
||
|
*/
|
||
|
|
||
|
|
||
|
/** The global root PmGlobals Dict object */
|
||
|
#define PM_PBUILTINS (pPmObj_t)(gVmGlobal.builtins)
|
||
|
|
||
|
/** The global None object */
|
||
|
#define PM_NONE (pPmObj_t)(gVmGlobal.pnone)
|
||
|
|
||
|
/** The global False object */
|
||
|
#define PM_FALSE (pPmObj_t)(gVmGlobal.pfalse)
|
||
|
|
||
|
/** The global True object */
|
||
|
#define PM_TRUE (pPmObj_t)(gVmGlobal.ptrue)
|
||
|
|
||
|
/** The global integer 0 object */
|
||
|
#define PM_ZERO (pPmObj_t)(gVmGlobal.pzero)
|
||
|
|
||
|
/** The global integer 1 object */
|
||
|
#define PM_ONE (pPmObj_t)(gVmGlobal.pone)
|
||
|
|
||
|
/** The global integer -1 object */
|
||
|
#define PM_NEGONE (pPmObj_t)(gVmGlobal.pnegone)
|
||
|
|
||
|
/** The global string "code" */
|
||
|
#define PM_CODE_STR (pPmObj_t)(gVmGlobal.pcodeStr)
|
||
|
|
||
|
#ifdef HAVE_CLASSES
|
||
|
/** The global string "__init__" */
|
||
|
#define PM_INIT_STR (pPmObj_t)(gVmGlobal.pinitStr)
|
||
|
#endif /* HAVE_CLASSES */
|
||
|
|
||
|
#ifdef HAVE_GENERATORS
|
||
|
/** The global string "Generator" */
|
||
|
#define PM_GENERATOR_STR (pPmObj_t)(gVmGlobal.pgenStr)
|
||
|
/** The global string "next" */
|
||
|
#define PM_NEXT_STR (pPmObj_t)(gVmGlobal.pnextStr)
|
||
|
#endif /* HAVE_GENERATORS */
|
||
|
|
||
|
#ifdef HAVE_ASSERT
|
||
|
/** The global string "Exception" */
|
||
|
#define PM_EXCEPTION_STR (pPmObj_t)(gVmGlobal.pexnStr)
|
||
|
#endif /* HAVE_ASSERT */
|
||
|
|
||
|
#ifdef HAVE_BYTEARRAY
|
||
|
/** The global string "bytearray" */
|
||
|
#define PM_BYTEARRAY_STR (pPmObj_t)(gVmGlobal.pbaStr)
|
||
|
#endif /* HAVE_BYTEARRAY */
|
||
|
|
||
|
/**
|
||
|
* This struct contains ALL of PyMite's globals
|
||
|
*/
|
||
|
typedef struct PmVmGlobal_s
|
||
|
{
|
||
|
/** Global none obj (none) */
|
||
|
pPmObj_t pnone;
|
||
|
|
||
|
/** Global integer 0 obj */
|
||
|
pPmInt_t pzero;
|
||
|
|
||
|
/** Global integer 1 obj */
|
||
|
pPmInt_t pone;
|
||
|
|
||
|
/** Global integer -1 obj */
|
||
|
pPmInt_t pnegone;
|
||
|
|
||
|
/** Global boolean False obj */
|
||
|
pPmInt_t pfalse;
|
||
|
|
||
|
/** Global boolean True obj */
|
||
|
pPmInt_t ptrue;
|
||
|
|
||
|
/** The string "code", used in interp.c RAISE_VARARGS */
|
||
|
pPmString_t pcodeStr;
|
||
|
|
||
|
/** Dict for builtins */
|
||
|
pPmDict_t builtins;
|
||
|
|
||
|
/** Paths to available images */
|
||
|
PmImgPaths_t imgPaths;
|
||
|
|
||
|
/** The single native frame. Static alloc so it won't be GC'd */
|
||
|
PmNativeFrame_t nativeframe;
|
||
|
|
||
|
/** PyMite release value for when an error occurs */
|
||
|
uint8_t errVmRelease;
|
||
|
|
||
|
/** PyMite source file ID number for when an error occurs */
|
||
|
uint8_t errFileId;
|
||
|
|
||
|
/** Line number for when an error occurs */
|
||
|
uint16_t errLineNum;
|
||
|
|
||
|
/** Thread list */
|
||
|
pPmList_t threadList;
|
||
|
|
||
|
/** Ptr to current thread */
|
||
|
pPmThread_t pthread;
|
||
|
|
||
|
#ifdef HAVE_CLASSES
|
||
|
/* NOTE: placing this field before the nativeframe field causes errors */
|
||
|
/** The string "__init__", used in interp.c CALL_FUNCTION */
|
||
|
pPmString_t pinitStr;
|
||
|
#endif /* HAVE_CLASSES */
|
||
|
|
||
|
#ifdef HAVE_GENERATORS
|
||
|
/** The string "Generator", used in interp.c CALL_FUNCTION */
|
||
|
pPmString_t pgenStr;
|
||
|
/** The string "next", used in interp.c FOR_ITER */
|
||
|
pPmString_t pnextStr;
|
||
|
#endif /* HAVE_GENERATORS */
|
||
|
|
||
|
#ifdef HAVE_ASSERT
|
||
|
/** The string "Exception", used in RAISE_VARARGS */
|
||
|
pPmString_t pexnStr;
|
||
|
#endif /* HAVE_ASSERT */
|
||
|
|
||
|
#ifdef HAVE_BYTEARRAY
|
||
|
/** The global string "bytearray" */
|
||
|
pPmString_t pbaStr;
|
||
|
#endif /* HAVE_BYTEARRAY */
|
||
|
|
||
|
#ifdef HAVE_PRINT
|
||
|
/** Remembers when a space is needed before printing the next object */
|
||
|
uint8_t needSoftSpace;
|
||
|
/** Remembers when something has printed since the last newline */
|
||
|
uint8_t somethingPrinted;
|
||
|
#endif /* HAVE_PRINT */
|
||
|
|
||
|
/** Flag to trigger rescheduling */
|
||
|
uint8_t reschedule;
|
||
|
} PmVmGlobal_t,
|
||
|
*pPmVmGlobal_t;
|
||
|
|
||
|
|
||
|
extern volatile PmVmGlobal_t gVmGlobal;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Initializes the global struct
|
||
|
*
|
||
|
* @return Return status
|
||
|
*/
|
||
|
PmReturn_t global_init(void);
|
||
|
|
||
|
/**
|
||
|
* Sets the builtins dict into the given module's attrs.
|
||
|
*
|
||
|
* If not yet done, loads the "__bt" module via global_loadBuiltins().
|
||
|
* Restrictions described in that functions documentation apply.
|
||
|
*
|
||
|
* @param pmod Module whose attrs receive builtins
|
||
|
* @return Return status
|
||
|
*/
|
||
|
PmReturn_t global_setBuiltins(pPmFunc_t pmod);
|
||
|
|
||
|
/**
|
||
|
* Loads the "__bt" module and sets the builtins dict (PM_PBUILTINS)
|
||
|
* to point to __bt's attributes dict.
|
||
|
* Creates "None" = None entry in builtins.
|
||
|
*
|
||
|
* When run, there should not be any other threads in the interpreter
|
||
|
* thread list yet.
|
||
|
*
|
||
|
* @return Return status
|
||
|
*/
|
||
|
PmReturn_t global_loadBuiltins(void);
|
||
|
|
||
|
#endif /* __GLOBAL_H__ */
|