tp_vm *_tp_init(void) { int i; tp_vm *tp = (tp_vm*)calloc(sizeof(tp_vm),1); tp->time_limit = TP_NO_LIMIT; tp->clocks = clock(); tp->time_elapsed = 0.0; tp->mem_limit = TP_NO_LIMIT; tp->mem_exceeded = 0; tp->mem_used = sizeof(tp_vm); tp->cur = 0; tp->jmp = 0; tp->ex = tp_None; tp->root = tp_list_nt(tp); for (i=0; i<256; i++) { tp->chars[i][0]=i; } tp_gc_init(tp); tp->_regs = tp_list(tp); for (i=0; i<TP_REGS; i++) { tp_set(tp,tp->_regs,tp_None,tp_None); } tp->builtins = tp_dict(tp); tp->modules = tp_dict(tp); tp->_params = tp_list(tp); for (i=0; i<TP_FRAMES; i++) { tp_set(tp,tp->_params,tp_None,tp_list(tp)); } tp_set(tp,tp->root,tp_None,tp->builtins); tp_set(tp,tp->root,tp_None,tp->modules); tp_set(tp,tp->root,tp_None,tp->_regs); tp_set(tp,tp->root,tp_None,tp->_params); tp_set(tp,tp->builtins,tp_string("MODULES"),tp->modules); tp_set(tp,tp->modules,tp_string("BUILTINS"),tp->builtins); tp_set(tp,tp->builtins,tp_string("BUILTINS"),tp->builtins); tp_obj sys = tp_dict(tp); tp_set(tp, sys, tp_string("version"), tp_string("tinypy 1.2+SVN")); tp_set(tp,tp->modules, tp_string("sys"), sys); tp->regs = tp->_regs.list.val->items; tp_full(tp); return tp; }
tp_obj tp_range(TP) { int a = TP_NUM(); int b = TP_NUM(); int c = TP_DEFAULT(tp_number(1)).number.val; tp_obj r = tp_list(tp); int i; for (i=a; i!=b; i+=c) { _tp_list_append(tp,r.list.val,tp_number(i)); } return r; }
tp_obj tp_split(TP) { tp_obj v = TP_OBJ(); tp_obj d = TP_OBJ(); tp_obj r = tp_list(tp); int i; while ((i=_tp_str_index(v,d))!=-1) { _tp_list_append(tp,r.list.val,tp_string_slice(tp,v,0,i)); v.string.val += i + d.string.len; v.string.len -= i + d.string.len; /* tp_grey(tp,r); // should stop gc or something instead*/ } _tp_list_append(tp,r.list.val,tp_string_slice(tp,v,0,v.string.len)); /* tp_grey(tp,r); // should stop gc or something instead*/ return r; }
tp_obj tp_range(TP) { int a,b,c,i; tp_obj r = tp_list(tp); switch (tp->params.list.val->len) { case 1: a = 0; b = TP_NUM(); c = 1; break; case 2: case 3: a = TP_NUM(); b = TP_NUM(); c = TP_DEFAULT(tp_number(1)).number.val; break; default: return r; } if (c != 0) { for (i=a; (c>0) ? i<b : i>b; i+=c) { _tp_list_append(tp,r.list.val,tp_number(i)); } } return r; }