python-on-a-chip online compiler

Dependencies:   mbed TSI

/media/uploads/va009039/p14p-f446re.png

more info: python-on-a-chip

Revision:
0:65f1469d6bfb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vm/global.h	Sat Mar 02 11:54:20 2013 +0000
@@ -0,0 +1,193 @@
+/*
+# This file is Copyright 2002 Dean Hall.
+# This file is part of the PyMite VM.
+# This file is licensed under the MIT License.
+# See the LICENSE file for details.
+*/
+
+
+#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 */
+
+/** The global string "__md" */
+#define PM_MD_STR (pPmObj_t)(gVmGlobal.pmdStr)
+
+
+/**
+ * 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 */
+
+    /** The global string "__md" */
+    pPmString_t pmdStr;
+
+#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__ */