davide carboni / Mbed 2 deprecated pymite_http_get

Dependencies:   mbed

Committer:
dadaista
Date:
Mon Jul 26 15:33:32 2010 +0000
Revision:
1:979fdbf19fdf
Parent:
0:14e5e829dffe

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dadaista 0:14e5e829dffe 1 /*
dadaista 0:14e5e829dffe 2 # This file is Copyright 2003, 2006, 2007, 2009 Dean Hall.
dadaista 0:14e5e829dffe 3 #
dadaista 0:14e5e829dffe 4 # This file is part of the PyMite VM.
dadaista 0:14e5e829dffe 5 # The PyMite VM is free software: you can redistribute it and/or modify
dadaista 0:14e5e829dffe 6 # it under the terms of the GNU GENERAL PUBLIC LICENSE Version 2.
dadaista 0:14e5e829dffe 7 #
dadaista 0:14e5e829dffe 8 # The PyMite VM is distributed in the hope that it will be useful,
dadaista 0:14e5e829dffe 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
dadaista 0:14e5e829dffe 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
dadaista 0:14e5e829dffe 11 # A copy of the GNU GENERAL PUBLIC LICENSE Version 2
dadaista 0:14e5e829dffe 12 # is seen in the file COPYING in this directory.
dadaista 0:14e5e829dffe 13 */
dadaista 0:14e5e829dffe 14
dadaista 0:14e5e829dffe 15
dadaista 0:14e5e829dffe 16 #ifndef __FRAME_H__
dadaista 0:14e5e829dffe 17 #define __FRAME_H__
dadaista 0:14e5e829dffe 18
dadaista 0:14e5e829dffe 19
dadaista 0:14e5e829dffe 20 /**
dadaista 0:14e5e829dffe 21 * \file
dadaista 0:14e5e829dffe 22 * \brief VM Frame
dadaista 0:14e5e829dffe 23 *
dadaista 0:14e5e829dffe 24 * VM frame header.
dadaista 0:14e5e829dffe 25 */
dadaista 0:14e5e829dffe 26
dadaista 0:14e5e829dffe 27
dadaista 0:14e5e829dffe 28 /**
dadaista 0:14e5e829dffe 29 * The maximum number of local variables a native function can have.
dadaista 0:14e5e829dffe 30 * This defines the length of the locals array in the native frame struct.
dadaista 0:14e5e829dffe 31 */
dadaista 0:14e5e829dffe 32 #define NATIVE_MAX_NUM_LOCALS 8
dadaista 0:14e5e829dffe 33
dadaista 0:14e5e829dffe 34
dadaista 0:14e5e829dffe 35 /**
dadaista 0:14e5e829dffe 36 * Block Type
dadaista 0:14e5e829dffe 37 *
dadaista 0:14e5e829dffe 38 * Numerical values to put in the 'b_type' field of the tPmBlockType struct.
dadaista 0:14e5e829dffe 39 */
dadaista 0:14e5e829dffe 40 typedef enum PmBlockType_e
dadaista 0:14e5e829dffe 41 {
dadaista 0:14e5e829dffe 42 /** Invalid block type */
dadaista 0:14e5e829dffe 43 B_INVALID = 0,
dadaista 0:14e5e829dffe 44
dadaista 0:14e5e829dffe 45 /** Loop type */
dadaista 0:14e5e829dffe 46 B_LOOP,
dadaista 0:14e5e829dffe 47
dadaista 0:14e5e829dffe 48 /** Try type */
dadaista 0:14e5e829dffe 49 B_TRY
dadaista 0:14e5e829dffe 50 } PmBlockType_t, *pPmBlockType_t;
dadaista 0:14e5e829dffe 51
dadaista 0:14e5e829dffe 52
dadaista 0:14e5e829dffe 53 /**
dadaista 0:14e5e829dffe 54 * Block
dadaista 0:14e5e829dffe 55 *
dadaista 0:14e5e829dffe 56 * Extra info for loops and trys (others?)
dadaista 0:14e5e829dffe 57 * Frames use linked list of blocks to handle
dadaista 0:14e5e829dffe 58 * nested loops and try-catch blocks.
dadaista 0:14e5e829dffe 59 */
dadaista 0:14e5e829dffe 60 typedef struct PmBlock_s
dadaista 0:14e5e829dffe 61 {
dadaista 0:14e5e829dffe 62 /** Obligatory obj descriptor */
dadaista 0:14e5e829dffe 63 PmObjDesc_t od;
dadaista 0:14e5e829dffe 64
dadaista 0:14e5e829dffe 65 /** Ptr to backup stack ptr */
dadaista 0:14e5e829dffe 66 pPmObj_t *b_sp;
dadaista 0:14e5e829dffe 67
dadaista 0:14e5e829dffe 68 /** Handler fxn obj */
dadaista 0:14e5e829dffe 69 uint8_t const *b_handler;
dadaista 0:14e5e829dffe 70
dadaista 0:14e5e829dffe 71 /** Block type */
dadaista 0:14e5e829dffe 72 PmBlockType_t b_type:8;
dadaista 0:14e5e829dffe 73
dadaista 0:14e5e829dffe 74 /** Next block in stack */
dadaista 0:14e5e829dffe 75 struct PmBlock_s *next;
dadaista 0:14e5e829dffe 76 } PmBlock_t,
dadaista 0:14e5e829dffe 77 *pPmBlock_t;
dadaista 0:14e5e829dffe 78
dadaista 0:14e5e829dffe 79
dadaista 0:14e5e829dffe 80 /**
dadaista 0:14e5e829dffe 81 * Frame
dadaista 0:14e5e829dffe 82 *
dadaista 0:14e5e829dffe 83 * A struct that holds the execution frame of a function, including the stack,
dadaista 0:14e5e829dffe 84 * local vars and pointer to the code object.
dadaista 0:14e5e829dffe 85 *
dadaista 0:14e5e829dffe 86 * This struct doesn't declare the stack.
dadaista 0:14e5e829dffe 87 * frame_new() is responsible for allocating the extra memory
dadaista 0:14e5e829dffe 88 * at the tail of fo_locals[] to hold both the locals and stack.
dadaista 0:14e5e829dffe 89 */
dadaista 0:14e5e829dffe 90 typedef struct PmFrame_s
dadaista 0:14e5e829dffe 91 {
dadaista 0:14e5e829dffe 92 /** Obligatory obj descriptor */
dadaista 0:14e5e829dffe 93 PmObjDesc_t od;
dadaista 0:14e5e829dffe 94
dadaista 0:14e5e829dffe 95 /** Ptr to previous frame obj */
dadaista 0:14e5e829dffe 96 struct PmFrame_s *fo_back;
dadaista 0:14e5e829dffe 97
dadaista 0:14e5e829dffe 98 /** Ptr to fxn obj */
dadaista 0:14e5e829dffe 99 pPmFunc_t fo_func;
dadaista 0:14e5e829dffe 100
dadaista 0:14e5e829dffe 101 /** Mem space where func's CO comes from */
dadaista 0:14e5e829dffe 102 PmMemSpace_t fo_memspace:8;
dadaista 0:14e5e829dffe 103
dadaista 0:14e5e829dffe 104 /** Instrxn ptr (pts into memspace) */
dadaista 0:14e5e829dffe 105 uint8_t const *fo_ip;
dadaista 0:14e5e829dffe 106
dadaista 0:14e5e829dffe 107 /** Linked list of blocks */
dadaista 0:14e5e829dffe 108 pPmBlock_t fo_blockstack;
dadaista 0:14e5e829dffe 109
dadaista 0:14e5e829dffe 110 /** Local attributes dict (non-fast locals) */
dadaista 0:14e5e829dffe 111 pPmDict_t fo_attrs;
dadaista 0:14e5e829dffe 112
dadaista 0:14e5e829dffe 113 /** Global attributes dict (pts to root frame's globals */
dadaista 0:14e5e829dffe 114 pPmDict_t fo_globals;
dadaista 0:14e5e829dffe 115
dadaista 0:14e5e829dffe 116 /** Points to next empty slot in fo_locals (1 past TOS) */
dadaista 0:14e5e829dffe 117 pPmObj_t *fo_sp;
dadaista 0:14e5e829dffe 118
dadaista 0:14e5e829dffe 119 /** Frame can be an import-frame that handles RETURN differently */
dadaista 0:14e5e829dffe 120 uint8_t fo_isImport:1;
dadaista 0:14e5e829dffe 121
dadaista 0:14e5e829dffe 122 #ifdef HAVE_CLASSES
dadaista 0:14e5e829dffe 123 /** Flag to indicate class initailzer frame; handle RETURN differently */
dadaista 0:14e5e829dffe 124 uint8_t fo_isInit:1;
dadaista 0:14e5e829dffe 125 #endif /* HAVE_CLASSES */
dadaista 0:14e5e829dffe 126
dadaista 0:14e5e829dffe 127 /** Array of local vars and stack (space appended at alloc) */
dadaista 0:14e5e829dffe 128 pPmObj_t fo_locals[1];
dadaista 0:14e5e829dffe 129 /* WARNING: Do not put new fields below fo_locals */
dadaista 0:14e5e829dffe 130 } PmFrame_t,
dadaista 0:14e5e829dffe 131 *pPmFrame_t;
dadaista 0:14e5e829dffe 132
dadaista 0:14e5e829dffe 133
dadaista 0:14e5e829dffe 134 /**
dadaista 0:14e5e829dffe 135 * Native Frame
dadaista 0:14e5e829dffe 136 *
dadaista 0:14e5e829dffe 137 * A struct that holds the execution frame of a native function,
dadaista 0:14e5e829dffe 138 * including the args and single stack slot, and pointer to the code object.
dadaista 0:14e5e829dffe 139 *
dadaista 0:14e5e829dffe 140 * This struct doesn't need an OD because it is only used statically in the
dadaista 0:14e5e829dffe 141 * globals struct. There's only one native frame, the global one.
dadaista 0:14e5e829dffe 142 * This happens because a native function is a leaf node
dadaista 0:14e5e829dffe 143 * in the call tree (a native func can't call python funcs).
dadaista 0:14e5e829dffe 144 */
dadaista 0:14e5e829dffe 145 typedef struct PmNativeFrame_s
dadaista 0:14e5e829dffe 146 {
dadaista 0:14e5e829dffe 147 /** Object descriptor */
dadaista 0:14e5e829dffe 148 PmObjDesc_t od;
dadaista 0:14e5e829dffe 149
dadaista 0:14e5e829dffe 150 /** Ptr to previous frame obj */
dadaista 0:14e5e829dffe 151 struct PmFrame_s *nf_back;
dadaista 0:14e5e829dffe 152
dadaista 0:14e5e829dffe 153 /** Ptr to fxn obj */
dadaista 0:14e5e829dffe 154 pPmFunc_t nf_func;
dadaista 0:14e5e829dffe 155
dadaista 0:14e5e829dffe 156 /** Single stack slot */
dadaista 0:14e5e829dffe 157 pPmObj_t nf_stack;
dadaista 0:14e5e829dffe 158
dadaista 0:14e5e829dffe 159 /** Boolean to indicate if the native frame is active */
dadaista 0:14e5e829dffe 160 uint8_t nf_active;
dadaista 0:14e5e829dffe 161
dadaista 0:14e5e829dffe 162 /** Number of args passed to the native function */
dadaista 0:14e5e829dffe 163 uint8_t nf_numlocals;
dadaista 0:14e5e829dffe 164
dadaista 0:14e5e829dffe 165 /** Local vars */
dadaista 0:14e5e829dffe 166 pPmObj_t nf_locals[NATIVE_MAX_NUM_LOCALS];
dadaista 0:14e5e829dffe 167 } PmNativeFrame_t,
dadaista 0:14e5e829dffe 168 *pPmNativeFrame_t;
dadaista 0:14e5e829dffe 169
dadaista 0:14e5e829dffe 170
dadaista 0:14e5e829dffe 171 /**
dadaista 0:14e5e829dffe 172 * Allocate space for a new frame, fill its fields
dadaista 0:14e5e829dffe 173 * with respect to the given function object.
dadaista 0:14e5e829dffe 174 * Return pointer to the new frame.
dadaista 0:14e5e829dffe 175 *
dadaista 0:14e5e829dffe 176 * @param pfunc ptr to Function object.
dadaista 0:14e5e829dffe 177 * @param r_pobj Return value; the new frame.
dadaista 0:14e5e829dffe 178 * @return Return status.
dadaista 0:14e5e829dffe 179 */
dadaista 0:14e5e829dffe 180 PmReturn_t frame_new(pPmObj_t pfunc, pPmObj_t *r_pobj);
dadaista 0:14e5e829dffe 181
dadaista 0:14e5e829dffe 182 #endif /* __FRAME_H__ */