MBED port of https://github.com/ys1382/filagree . The only change is adding #define MBED

Dependents:   filagree_test

Committer:
yusufx
Date:
Wed May 30 21:13:01 2012 +0000
Revision:
0:1a89e28dea91

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yusufx 0:1a89e28dea91 1 #ifndef VM_H
yusufx 0:1a89e28dea91 2 #define VM_H
yusufx 0:1a89e28dea91 3
yusufx 0:1a89e28dea91 4
yusufx 0:1a89e28dea91 5 #include <stdint.h>
yusufx 0:1a89e28dea91 6 #include <inttypes.h>
yusufx 0:1a89e28dea91 7 #include "struct.h"
yusufx 0:1a89e28dea91 8 #include "util.h"
yusufx 0:1a89e28dea91 9 #include "variable.h"
yusufx 0:1a89e28dea91 10
yusufx 0:1a89e28dea91 11 #define ERROR_NULL "null pointer"
yusufx 0:1a89e28dea91 12 #define ERROR_INDEX "index out of bounds"
yusufx 0:1a89e28dea91 13
yusufx 0:1a89e28dea91 14 struct Context {
yusufx 0:1a89e28dea91 15 struct program_state *vm_state;
yusufx 0:1a89e28dea91 16 struct stack *program_stack;
yusufx 0:1a89e28dea91 17 struct stack *operand_stack;
yusufx 0:1a89e28dea91 18 struct stack *rhs;
yusufx 0:1a89e28dea91 19 struct variable *vm_exception;
yusufx 0:1a89e28dea91 20 bridge *callback2c;
yusufx 0:1a89e28dea91 21 bool runtime;
yusufx 0:1a89e28dea91 22 uint32_t num_vars;
yusufx 0:1a89e28dea91 23 struct variable* error;
yusufx 0:1a89e28dea91 24 uint8_t indent;
yusufx 0:1a89e28dea91 25 };
yusufx 0:1a89e28dea91 26
yusufx 0:1a89e28dea91 27 enum Opcode {
yusufx 0:1a89e28dea91 28 VM_NIL, // push nil
yusufx 0:1a89e28dea91 29 VM_INT, // push an integer
yusufx 0:1a89e28dea91 30 VM_FLT, // push a float
yusufx 0:1a89e28dea91 31 VM_BOOL,// push a boolean
yusufx 0:1a89e28dea91 32 VM_STR, // push a string
yusufx 0:1a89e28dea91 33 VM_VAR, // push a variable
yusufx 0:1a89e28dea91 34 VM_FNC, // push a function
yusufx 0:1a89e28dea91 35 VM_DST, // done with assignment
yusufx 0:1a89e28dea91 36 VM_SET, // set a variable
yusufx 0:1a89e28dea91 37 VM_SRC, // push a set of values
yusufx 0:1a89e28dea91 38 VM_LST, // push a list
yusufx 0:1a89e28dea91 39 VM_MAP, // push a map
yusufx 0:1a89e28dea91 40 VM_GET, // get an item from a list or map
yusufx 0:1a89e28dea91 41 VM_PUT, // put an item in a list or map
yusufx 0:1a89e28dea91 42 VM_ADD, // add two values
yusufx 0:1a89e28dea91 43 VM_SUB, // subtract two values
yusufx 0:1a89e28dea91 44 VM_MUL, // multiply two values
yusufx 0:1a89e28dea91 45 VM_DIV, // divide two values
yusufx 0:1a89e28dea91 46 VM_MOD, // modulo
yusufx 0:1a89e28dea91 47 VM_BND, // bitwise and
yusufx 0:1a89e28dea91 48 VM_BOR, // bitwise or
yusufx 0:1a89e28dea91 49 VM_INV, // bitwise inverse
yusufx 0:1a89e28dea91 50 VM_XOR, // xor
yusufx 0:1a89e28dea91 51 VM_LSF, // left shift
yusufx 0:1a89e28dea91 52 VM_RSF, // right shift
yusufx 0:1a89e28dea91 53 VM_NEG, // arithmetic negate a value
yusufx 0:1a89e28dea91 54 VM_NOT, // boolean negate a value
yusufx 0:1a89e28dea91 55 VM_EQU, // compare
yusufx 0:1a89e28dea91 56 VM_NEQ, // diff
yusufx 0:1a89e28dea91 57 VM_GTN, // greater than
yusufx 0:1a89e28dea91 58 VM_LTN, // less than
yusufx 0:1a89e28dea91 59 VM_AND, // logical and
yusufx 0:1a89e28dea91 60 VM_OR, // logical or
yusufx 0:1a89e28dea91 61 VM_IFF, // if then
yusufx 0:1a89e28dea91 62 VM_JMP, // jump the program counter
yusufx 0:1a89e28dea91 63 VM_CAL, // call a function
yusufx 0:1a89e28dea91 64 VM_MET, // call an object method
yusufx 0:1a89e28dea91 65 VM_RET, // return from a function,
yusufx 0:1a89e28dea91 66 VM_ITR, // iteration loop
yusufx 0:1a89e28dea91 67 VM_COM, // comprehension
yusufx 0:1a89e28dea91 68 VM_TRY, // try.catch
yusufx 0:1a89e28dea91 69 VM_TRO, // throw
yusufx 0:1a89e28dea91 70 };
yusufx 0:1a89e28dea91 71
yusufx 0:1a89e28dea91 72 #define ERROR_OPCODE "unknown opcode"
yusufx 0:1a89e28dea91 73
yusufx 0:1a89e28dea91 74 #ifdef DEBUG
yusufx 0:1a89e28dea91 75 void display_program(struct byte_array* program);
yusufx 0:1a89e28dea91 76 #endif
yusufx 0:1a89e28dea91 77 struct Context *vm_init();
yusufx 0:1a89e28dea91 78 struct variable *execute(struct byte_array *program,
yusufx 0:1a89e28dea91 79 bool in_context,
yusufx 0:1a89e28dea91 80 bridge *callback_to_c);
yusufx 0:1a89e28dea91 81 void garbage_collect(struct Context *context);
yusufx 0:1a89e28dea91 82
yusufx 0:1a89e28dea91 83 void vm_call(struct Context *context);
yusufx 0:1a89e28dea91 84 void *vm_exit_message(struct Context *context, const char *format, ...);
yusufx 0:1a89e28dea91 85 void vm_null_check(struct Context *context, const void* p);
yusufx 0:1a89e28dea91 86 void vm_assert(struct Context *context, bool assertion, const char *format, ...);
yusufx 0:1a89e28dea91 87
yusufx 0:1a89e28dea91 88 #endif // VM_H