eth/tracers/js: add memory.length method (#24887)
This commit is contained in:
		
							parent
							
								
									a35a5cad22
								
							
						
					
					
						commit
						310f751639
					
				| @ -517,10 +517,15 @@ func (mo *memoryObj) GetUint(addr int64) goja.Value { | |||||||
| 	return res | 	return res | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (mo *memoryObj) Length() int { | ||||||
|  | 	return mo.w.memory.Len() | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (m *memoryObj) setupObject() *goja.Object { | func (m *memoryObj) setupObject() *goja.Object { | ||||||
| 	o := m.vm.NewObject() | 	o := m.vm.NewObject() | ||||||
| 	o.Set("slice", m.vm.ToValue(m.Slice)) | 	o.Set("slice", m.vm.ToValue(m.Slice)) | ||||||
| 	o.Set("getUint", m.vm.ToValue(m.GetUint)) | 	o.Set("getUint", m.vm.ToValue(m.GetUint)) | ||||||
|  | 	o.Set("length", m.vm.ToValue(m.Length)) | ||||||
| 	return o | 	return o | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -148,6 +148,10 @@ func (mw *memoryWrapper) getUint(addr int64) *big.Int { | |||||||
| func (mw *memoryWrapper) pushObject(vm *duktape.Context) { | func (mw *memoryWrapper) pushObject(vm *duktape.Context) { | ||||||
| 	obj := vm.PushObject() | 	obj := vm.PushObject() | ||||||
| 
 | 
 | ||||||
|  | 	// Generate the `length` method which returns the memory length
 | ||||||
|  | 	vm.PushGoFunction(func(ctx *duktape.Context) int { ctx.PushInt(mw.memory.Len()); return 1 }) | ||||||
|  | 	vm.PutPropString(obj, "length") | ||||||
|  | 
 | ||||||
| 	// Generate the `slice` method which takes two ints and returns a buffer
 | 	// Generate the `slice` method which takes two ints and returns a buffer
 | ||||||
| 	vm.PushGoFunction(func(ctx *duktape.Context) int { | 	vm.PushGoFunction(func(ctx *duktape.Context) int { | ||||||
| 		blob := mw.slice(int64(ctx.GetInt(-2)), int64(ctx.GetInt(-1))) | 		blob := mw.slice(int64(ctx.GetInt(-2)), int64(ctx.GetInt(-1))) | ||||||
|  | |||||||
| @ -125,6 +125,9 @@ func testTracer(t *testing.T, newTracer tracerCtor) { | |||||||
| 		}, { // tests that depth is reported correctly
 | 		}, { // tests that depth is reported correctly
 | ||||||
| 			code: "{depths: [], step: function(log) { this.depths.push(log.stack.length()); }, fault: function() {}, result: function() { return this.depths; }}", | 			code: "{depths: [], step: function(log) { this.depths.push(log.stack.length()); }, fault: function() {}, result: function() { return this.depths; }}", | ||||||
| 			want: `[0,1,2]`, | 			want: `[0,1,2]`, | ||||||
|  | 		}, { // tests memory length
 | ||||||
|  | 			code: "{lengths: [], step: function(log) { this.lengths.push(log.memory.length()); }, fault: function() {}, result: function() { return this.lengths; }}", | ||||||
|  | 			want: `[0,0,0]`, | ||||||
| 		}, { // tests to-string of opcodes
 | 		}, { // tests to-string of opcodes
 | ||||||
| 			code: "{opcodes: [], step: function(log) { this.opcodes.push(log.op.toString()); }, fault: function() {}, result: function() { return this.opcodes; }}", | 			code: "{opcodes: [], step: function(log) { this.opcodes.push(log.op.toString()); }, fault: function() {}, result: function() { return this.opcodes; }}", | ||||||
| 			want: `["PUSH1","PUSH1","STOP"]`, | 			want: `["PUSH1","PUSH1","STOP"]`, | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user