blob: 7efcf9ab334964242037b6df8130df006b93e237 [file] [log] [blame]
Damien Georgec5572152014-04-12 13:07:45 +01001#include <stdint.h>
2#include <stdio.h>
3#include <string.h>
4
Damien Georgec2e22d62015-01-01 21:14:42 +00005#include "py/nlr.h"
Damien Georgec2e22d62015-01-01 21:14:42 +00006#include "py/compile.h"
Damien Georgec2e22d62015-01-01 21:14:42 +00007#include "py/runtime.h"
8#include "py/repl.h"
Damien Georgec5572152014-04-12 13:07:45 +01009
Damien Georgec4b592d2015-06-22 22:38:47 +010010void do_str(const char *src, mp_parse_input_kind_t input_kind) {
Damien Georgec5572152014-04-12 13:07:45 +010011 mp_lexer_t *lex = mp_lexer_new_from_str_len(MP_QSTR__lt_stdin_gt_, src, strlen(src), 0);
12 if (lex == NULL) {
13 return;
14 }
15
Damien Georgec5572152014-04-12 13:07:45 +010016 nlr_buf_t nlr;
17 if (nlr_push(&nlr) == 0) {
Damien George0bfc7632015-02-07 18:33:58 +000018 qstr source_name = lex->source_name;
Damien George58e0f4a2015-09-23 10:50:43 +010019 mp_parse_tree_t parse_tree = mp_parse(lex, input_kind);
20 mp_obj_t module_fun = mp_compile(&parse_tree, source_name, MP_EMIT_OPT_NONE, true);
Damien Georgec5572152014-04-12 13:07:45 +010021 mp_call_function_0(module_fun);
22 nlr_pop();
23 } else {
24 // uncaught exception
Damien George7f9d1d62015-04-09 23:56:15 +010025 mp_obj_print_exception(&mp_plat_print, (mp_obj_t)nlr.ret_val);
Damien Georgec5572152014-04-12 13:07:45 +010026 }
27}
28
29int main(int argc, char **argv) {
Damien Georgec5572152014-04-12 13:07:45 +010030 mp_init();
Damien Georgec4b592d2015-06-22 22:38:47 +010031 do_str("print('hello world!', list(x+1 for x in range(10)), end='eol\\n')", MP_PARSE_SINGLE_INPUT);
32 do_str("for i in range(10):\n print(i)", MP_PARSE_FILE_INPUT);
Damien Georgec5572152014-04-12 13:07:45 +010033 mp_deinit();
34 return 0;
35}
36
37void gc_collect(void) {
38}
39
40mp_lexer_t *mp_lexer_new_from_file(const char *filename) {
41 return NULL;
42}
43
44mp_import_stat_t mp_import_stat(const char *path) {
45 return MP_IMPORT_STAT_NO_EXIST;
46}
47
Damien George4b72b3a2016-01-03 14:21:40 +000048mp_obj_t mp_builtin_open(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs) {
Damien Georgec5572152014-04-12 13:07:45 +010049 return mp_const_none;
50}
stijn2fe4cf72014-10-04 08:51:33 +020051MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open);
Damien Georgec5572152014-04-12 13:07:45 +010052
53void nlr_jump_fail(void *val) {
54}
55
Sven Wegener1a5a6d12014-11-05 21:02:37 +010056void NORETURN __fatal_error(const char *msg) {
57 while (1);
58}
59
60#ifndef NDEBUG
61void MP_WEAK __assert_func(const char *file, int line, const char *func, const char *expr) {
62 printf("Assertion '%s' failed, at file %s:%d\n", expr, file, line);
63 __fatal_error("Assertion failed");
64}
65#endif
66
Damien Georgec5572152014-04-12 13:07:45 +010067/*
68int _lseek() {return 0;}
69int _read() {return 0;}
70int _write() {return 0;}
71int _close() {return 0;}
72void _exit(int x) {for(;;){}}
73int _sbrk() {return 0;}
74int _kill() {return 0;}
75int _getpid() {return 0;}
76int _fstat() {return 0;}
77int _isatty() {return 0;}
78*/
79
80void *malloc(size_t n) {return NULL;}
81void *calloc(size_t nmemb, size_t size) {return NULL;}
82void *realloc(void *ptr, size_t size) {return NULL;}
83void free(void *p) {}
84int printf(const char *m, ...) {return 0;}
85void *memcpy(void *dest, const void *src, size_t n) {return NULL;}
86int memcmp(const void *s1, const void *s2, size_t n) {return 0;}
87void *memmove(void *dest, const void *src, size_t n) {return NULL;}
88void *memset(void *s, int c, size_t n) {return NULL;}
89int strcmp(const char *s1, const char* s2) {return 0;}
90int strncmp(const char *s1, const char* s2, size_t n) {return 0;}
91size_t strlen(const char *s) {return 0;}
92char *strcat(char *dest, const char *src) {return NULL;}
93char *strchr(const char *dest, int c) {return NULL;}
94#include <stdarg.h>
95int vprintf(const char *format, va_list ap) {return 0;}
96int vsnprintf(char *str, size_t size, const char *format, va_list ap) {return 0;}
97
98#undef putchar
99int putchar(int c) {return 0;}
100int puts(const char *s) {return 0;}
101
102void _start(void) {main(0, NULL);}