on master help sign in
javascript: free memory in i$valstack properly
f7d9706raichoo
jsrts/Runtime-common.js+1−1
@@ -1,6 +1,6 @@
1/** @constructor */
1/** @constructor */
2var i$VM = function() {
2var i$VM = function() {
3− this.valstack = [];
3+ this.valstack = {};
4 this.valstack_top = 0;
4 this.valstack_top = 0;
5 this.valstack_base = 0;
5 this.valstack_base = 0;
6
6
src/IRTS/CodegenJavaScript.hs+1−1
@@ -596,7 +596,7 @@ jsBASETOP _ 0 = JSAssign jsSTACKBASE jsSTACKTOP
596jsBASETOP _ n = JSAssign jsSTACKBASE (JSBinOp "+" jsSTACKTOP (JSNum (JSInt n)))
596jsBASETOP _ n = JSAssign jsSTACKBASE (JSBinOp "+" jsSTACKTOP (JSNum (JSInt n)))
597
597
598jsNULL :: CompileInfo -> Reg -> JS
598jsNULL :: CompileInfo -> Reg -> JS
599−jsNULL _ r = JSAssign (translateReg r) JSNull
599+jsNULL _ r = JSDelete (translateReg r)
600
600
601jsERROR :: CompileInfo -> String -> JS
601jsERROR :: CompileInfo -> String -> JS
602jsERROR _ = JSError
602jsERROR _ = JSError
src/IRTS/JavaScript/AST.hs+4
@@ -76,6 +76,7 @@ data JS = JSRaw String
76 | JSWhile JS JS
76 | JSWhile JS JS
77 | JSFFI String [JS]
77 | JSFFI String [JS]
78 | JSAnnotation JSAnnotation JS
78 | JSAnnotation JSAnnotation JS
79+ | JSDelete JS
79 | JSNoop
80 | JSNoop
80 deriving Eq
81 deriving Eq
81
82
@@ -129,6 +130,9 @@ compileJS' indent (JSAnnotation annotation js) =
129 `T.append` " */\n"
130 `T.append` " */\n"
130 `T.append` compileJS' indent js
131 `T.append` compileJS' indent js
131
132
133+compileJS' indent (JSDelete js) =
134+ "delete " `T.append` compileJS' 0 js
135+
132compileJS' indent (JSFFI raw args) =
136compileJS' indent (JSFFI raw args) =
133 ffi raw (map (T.unpack . compileJS' indent) args)
137 ffi raw (map (T.unpack . compileJS' indent) args)
134
138