on f0a67ff help sign in
Idris-dev/jsrts/Runtime-common.js
117 lines 2.4 kB history raw
1/** @constructor */
2var i$VM = function() {
3 this.valstack = {};
4 this.valstack_top = 0;
5 this.valstack_base = 0;
7 this.ret = null;
9 this.callstack = [];
12var i$vm;
13var i$valstack;
14var i$valstack_top;
15var i$valstack_base;
16var i$ret;
17var i$callstack;
19var i$Int = {};
20var i$String = {};
21var i$Integer = {};
22var i$Float = {};
23var i$Char = {};
24var i$Ptr = {};
25var i$Forgot = {};
27/** @constructor */
28var i$CON = function(tag,args,app,ev) {
29 this.tag = tag;
30 this.args = args;
31 this.app = app;
32 this.ev = ev;
35/** @constructor */
36var i$POINTER = function(addr) {
37 this.addr = addr;
40var i$SCHED = function(vm) {
41 i$vm = vm;
42 i$valstack = vm.valstack;
43 i$valstack_top = vm.valstack_top;
44 i$valstack_base = vm.valstack_base;
45 i$ret = vm.ret;
46 i$callstack = vm.callstack;
49var i$SLIDE = function(args) {
50 for (var i = 0; i < args; ++i)
51 i$valstack[i$valstack_base + i] = i$valstack[i$valstack_top + i];
54var i$PROJECT = function(val,loc,arity) {
55 for (var i = 0; i < arity; ++i)
56 i$valstack[i$valstack_base + i + loc] = val.args[i];
59var i$CALL = function(fun,args) {
60 i$callstack.push(args);
61 i$callstack.push(fun);
64var i$ffiWrap = function(fid,oldbase,myoldbase) {
65 return function() {
66 var oldstack = i$callstack;
67 i$callstack = [];
69 var res = fid;
71 for(var i = 0; i < (arguments.length ? arguments.length : 1); ++i) {
72 while (res instanceof i$CON) {
73 i$valstack_top += 1;
74 i$valstack[i$valstack_top] = res;
75 i$valstack[i$valstack_top + 1] = arguments[i];
76 i$SLIDE(2);
77 i$valstack_top = i$valstack_base + 2;
78 i$CALL(_idris__123_APPLY0_125_,[oldbase])
79 while (i$callstack.length) {
80 var func = i$callstack.pop();
81 var args = i$callstack.pop();
82 func.apply(this,args);
83 }
84 res = i$ret;
85 }
86 }
88 i$callstack = oldstack;
90 return i$ret;
91 }
94var i$charCode = function(str) {
95 if (typeof str == "string")
96 return str.charCodeAt(0);
97 else
98 return str;
101var i$fromCharCode = function(chr) {
102 if (typeof chr == "string")
103 return chr;
104 else
105 return String.fromCharCode(chr);
108var i$RUN = function () {
109 for (var i = 0; i < 10000 && i$callstack.length; i++) {
110 var func = i$callstack.pop();
111 var args = i$callstack.pop();
112 func.apply(this,args);
113 };
115 if (i$callstack.length)
116 setTimeout(i$RUN, 0);