feat: send value stack to debug client
This commit is contained in:
parent
26591d6631
commit
e326847287
@ -40,7 +40,7 @@ public class SimpleDebugger implements Debugger {
|
|||||||
public static final String VSCODE_SHALLOW_COPY = "function(){let t={__proto__:this.__proto__\n},e=Object.getOwnPropertyNames(this);for(let r=0;r<e.length;++r){let i=e[r],n=i>>>0;if(String(n>>>0)===i&&n>>>0!==4294967295)continue;let s=Object.getOwnPropertyDescriptor(this,i);s&&Object.defineProperty(t,i,s)}return t}";
|
public static final String VSCODE_SHALLOW_COPY = "function(){let t={__proto__:this.__proto__\n},e=Object.getOwnPropertyNames(this);for(let r=0;r<e.length;++r){let i=e[r],n=i>>>0;if(String(n>>>0)===i&&n>>>0!==4294967295)continue;let s=Object.getOwnPropertyDescriptor(this,i);s&&Object.defineProperty(t,i,s)}return t}";
|
||||||
public static final String VSCODE_FLATTEN_ARRAY = "function(t,e){let r={\n},i=t===-1?0:t,n=e===-1?this.length:t+e;for(let s=i;s<n&&s<this.length;++s){let o=Object.getOwnPropertyDescriptor(this,s);o&&Object.defineProperty(r,s,o)}return r}";
|
public static final String VSCODE_FLATTEN_ARRAY = "function(t,e){let r={\n},i=t===-1?0:t,n=e===-1?this.length:t+e;for(let s=i;s<n&&s<this.length;++s){let o=Object.getOwnPropertyDescriptor(this,s);o&&Object.defineProperty(r,s,o)}return r}";
|
||||||
public static final String VSCODE_CALL = "function(t){return t.call(this)\n}";
|
public static final String VSCODE_CALL = "function(t){return t.call(this)\n}";
|
||||||
|
|
||||||
private static enum State {
|
private static enum State {
|
||||||
RESUMED,
|
RESUMED,
|
||||||
STEPPING_IN,
|
STEPPING_IN,
|
||||||
@ -98,7 +98,7 @@ public class SimpleDebugger implements Debugger {
|
|||||||
public CodeFrame frame;
|
public CodeFrame frame;
|
||||||
public CodeFunction func;
|
public CodeFunction func;
|
||||||
public int id;
|
public int id;
|
||||||
public ObjectValue local, capture, global;
|
public ObjectValue local, capture, global, valstack;
|
||||||
public JSONMap serialized;
|
public JSONMap serialized;
|
||||||
public Location location;
|
public Location location;
|
||||||
public boolean debugData = false;
|
public boolean debugData = false;
|
||||||
@ -120,6 +120,7 @@ public class SimpleDebugger implements Debugger {
|
|||||||
this.capture = frame.getCaptureScope(ctx, true);
|
this.capture = frame.getCaptureScope(ctx, true);
|
||||||
this.local.setPrototype(ctx, capture);
|
this.local.setPrototype(ctx, capture);
|
||||||
this.capture.setPrototype(ctx, global);
|
this.capture.setPrototype(ctx, global);
|
||||||
|
this.valstack = frame.getValStackScope(ctx);
|
||||||
|
|
||||||
if (location != null) {
|
if (location != null) {
|
||||||
debugData = true;
|
debugData = true;
|
||||||
@ -131,6 +132,7 @@ public class SimpleDebugger implements Debugger {
|
|||||||
.add(new JSONMap().set("type", "local").set("name", "Local Scope").set("object", serializeObj(ctx, local)))
|
.add(new JSONMap().set("type", "local").set("name", "Local Scope").set("object", serializeObj(ctx, local)))
|
||||||
.add(new JSONMap().set("type", "closure").set("name", "Closure").set("object", serializeObj(ctx, capture)))
|
.add(new JSONMap().set("type", "closure").set("name", "Closure").set("object", serializeObj(ctx, capture)))
|
||||||
.add(new JSONMap().set("type", "global").set("name", "Global Scope").set("object", serializeObj(ctx, global)))
|
.add(new JSONMap().set("type", "global").set("name", "Global Scope").set("object", serializeObj(ctx, global)))
|
||||||
|
.add(new JSONMap().set("type", "other").set("name", "Value Stack").set("object", serializeObj(ctx, valstack)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package me.topchetoeu.jscript.engine.frame;
|
package me.topchetoeu.jscript.engine.frame;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
import me.topchetoeu.jscript.Location;
|
import me.topchetoeu.jscript.Location;
|
||||||
@ -82,6 +83,26 @@ public class CodeFrame {
|
|||||||
|
|
||||||
return new ScopeValue(scope.captures, names);
|
return new ScopeValue(scope.captures, names);
|
||||||
}
|
}
|
||||||
|
public ObjectValue getValStackScope(Context ctx) {
|
||||||
|
return new ObjectValue() {
|
||||||
|
@Override
|
||||||
|
protected Object getField(Context ctx, Object key) {
|
||||||
|
var i = (int)Values.toNumber(ctx, key);
|
||||||
|
if (i < 0 || i >= stackPtr) return null;
|
||||||
|
else return stack[i];
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected boolean hasField(Context ctx, Object key) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public List<Object> keys(boolean includeNonEnumerable) {
|
||||||
|
var res = super.keys(includeNonEnumerable);
|
||||||
|
for (var i = 0; i < stackPtr; i++) res.add(i);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public void addTry(int n, int catchN, int finallyN) {
|
public void addTry(int n, int catchN, int finallyN) {
|
||||||
var res = new TryCtx(codePtr + 1, n, catchN, finallyN);
|
var res = new TryCtx(codePtr + 1, n, catchN, finallyN);
|
||||||
|
Loading…
Reference in New Issue
Block a user