Skip to content

Commit 78bf126

Browse files
Update agBuffer.js
fix all the casting stuff jwklong wanted me to add
1 parent eb70eef commit 78bf126

1 file changed

Lines changed: 50 additions & 41 deletions

File tree

static/extensions/AndrewGaming587/agBuffer.js

Lines changed: 50 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1+
// Notice: the reason I don't use instanceof for checking for my custom type is because it doesn't f**king work for some reason
22

33
(async function(Scratch) {
44
const {BlockType, BlockShape, ArgumentType, Cast, vm} = Scratch
@@ -28,14 +28,14 @@
2828
return this.arrayBuffer
2929
}
3030
jwArrayHandler() {
31-
return `Array Buffer<${this.arrayBuffer.byteLength}>`
31+
return `Buffer<${this.arrayBuffer.byteLength}>`
3232
}
3333
dogeiscutObjectHandler() {
3434
return `Array Buffer (Length: ${this.arrayBuffer.byteLength})`
3535
}
36-
dogeiscutSetHandler() {
37-
return `Buffer<${this.arrayBuffer.byteLength}>`
38-
}
36+
// dogeiscutSetHandler() {
37+
// return `Buffer<${this.arrayBuffer.byteLength}>`
38+
// }
3939
toJSON() {
4040
return Array.from(new Uint8Array(this.arrayBuffer))
4141
}
@@ -76,9 +76,9 @@
7676
root.appendChild(arrBufDisplay)
7777
}
7878
} else {
79-
let nullBuffer = span(`(Null Buffer)`)
80-
nullBuffer.style.color = "#888888"
81-
root.appendChild(nullBuffer)
79+
let emptyBuffer = span(`(Empty Buffer)`)
80+
emptyBuffer.style.color = "#888888"
81+
root.appendChild(emptyBuffer)
8282
}
8383
let sizeDisplay = span(`Byte Length: ${length}`)
8484
sizeDisplay.style.fontSize = "12px"
@@ -88,42 +88,44 @@
8888
toString() {
8989
return JSON.stringify([...(new Uint8Array(this.arrayBuffer))]);
9090
}
91-
constructor(source) {
91+
constructor(source, passthrough = true) { // Passthrough will return the source if the source is already an ArrayBufferType and passthrough is true, for optimization reasons
92+
if (source == undefined || source == null) source = 0;
93+
if (passthrough && ("customId" in source && source.customId == "agBuffer")) return source;
9294
if (source instanceof Array) {
93-
window.agBufferDebugLastType = "jsarray"
95+
// window.agBufferDebugLastType = "jsarray"
9496
// Uint8Array conversion is necessary because ArrayBuffer constructor doesn't take normal arrays as input
9597
this.arrayBuffer = (new Uint8Array(source)).buffer
9698
} else if (source instanceof vm.jwArray.Type) {
97-
window.agBufferDebugLastType = "jwArray"
99+
// window.agBufferDebugLastType = "jwArray"
98100
// Same reason here
99101
this.arrayBuffer = new Uint8Array(source.array).buffer
100102
} else if (typeof source == "number") {
101-
window.agBufferDebugLastType = "length"
103+
// window.agBufferDebugLastType = "length"
102104
// no Uint8Array needed as the constructor can take (number) to create a blank arraybuffer of length (number)
103105
this.arrayBuffer = new ArrayBuffer(source)
104106
} else if (source instanceof Uint8Array || (source.buffer && source.buffer instanceof ArrayBuffer)) {
105-
window.agBufferDebugLastType = "typedarray"
107+
// window.agBufferDebugLastType = "typedarray"
106108
this.arrayBuffer = source.buffer
107109
} else if (source instanceof ArrayBuffer) {
108-
window.agBufferDebugLastType = "jsarraybuffer"
110+
// window.agBufferDebugLastType = "jsarraybuffer"
109111
this.arrayBuffer = source
110112

111113
} else if (typeof source == "string" && (() => {try{return Array.isArray(JSON.parse(source))}catch{return false}})()) { // weird inline code to see if we can JSON.parse the string as array
112-
window.agBufferDebugLastType = "json"
114+
// window.agBufferDebugLastType = "json"
113115
this.arrayBuffer = new Uint8Array(JSON.parse(source)).buffer
114116
} else if (typeof(source.toArrayBuffer) == "function") {
115-
window.agBufferDebugLastType = "toArrayBuffer"
117+
// window.agBufferDebugLastType = "toArrayBuffer"
116118
this.arrayBuffer = source.toArrayBuffer()
117119
} else {
118-
window.agBufferDebugLastType = "invalidBuffer"
120+
// window.agBufferDebugLastType = "invalidBuffer"
119121
this.arrayBuffer = new ArrayBuffer(0);
120122
}
121123

122124
// Make a dataview to access the buffer better
123125
this.dataView = new DataView(this.arrayBuffer)
124126
// some debug code so I can debug what the heck the problem is from the console
125127

126-
window.agBufferDebug = this;
128+
// window.agBufferDebug = this;
127129
}
128130
}
129131
const agBuffer = {
@@ -168,6 +170,7 @@
168170
v => new ArrayBufferType(new Uint8Array([...v]))
169171
);
170172
vm.runtime.registerCompiledExtensionBlocks('agBuffer', this.getCompileInfo())
173+
if (!vm.runtime.ext_jwArray) vm.extensionManager.loadExtensionIdSync('jwArray')
171174
}
172175
getInfo() {
173176
return {
@@ -479,7 +482,6 @@
479482
VALUE: {type:ArgumentType.BOOLEAN}
480483
},
481484
},
482-
483485
],
484486
"menus":{
485487
DATATYPES: {
@@ -554,6 +556,7 @@
554556
}
555557
builderAppendBuffer({VALUE}, util) {
556558
if ((VALUE == undefined || VALUE == null) && !agBuffer.disableErrorHandling) return;
559+
VALUE = new ArrayBuffer(VALUE)
557560
let bi = util.thread._agBufferBuilderIndex ?? []
558561
if (bi[bi.length-1]) {
559562
let buffer = bi[bi.length-1]
@@ -573,15 +576,18 @@
573576
}
574577
}
575578

576-
toArray(args) {
579+
toArray({BUFFER}) {
577580
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return;
578-
const arrbuf = args.BUFFER;
581+
BUFFER = new ArrayBuffer(BUFFER)
582+
const arrbuf = BUFFER;
579583

580584
return vm.jwArray.Type.toArray(Array.from(new Uint8Array(arrbuf.arrayBuffer)))
581585
}
582586
getValue(args) {
583587
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return 0;
584-
let buffer = args.BUFFER
588+
589+
let buffer = new ArrayBufferType(args.BUFFER)
590+
585591
const type = args.TYPE
586592
const index = args.INDEX
587593
const endian = args.ENDIAN
@@ -616,7 +622,7 @@
616622
setValue(args) {
617623
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return;
618624

619-
let buffer = args.BUFFER
625+
let buffer = new ArrayBufferType(args.BUFFER)
620626
const type = args.TYPE
621627
const index = args.INDEX
622628
const endian = args.ENDIAN
@@ -677,6 +683,7 @@
677683
}
678684
getSize(args) {
679685
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return 0;
686+
args.BUFFER = new ArrayBufferType(args.BUFFER)
680687
if (!args.BUFFER.customId || args.BUFFER.customId != "agBuffer") return 0;
681688
return args.BUFFER.arrayBuffer.byteLength
682689
}
@@ -685,6 +692,7 @@
685692
}
686693
toString(args) {
687694
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return "";
695+
args.BUFFER = new ArrayBufferType(args.BUFFER)
688696
return new TextDecoder().decode(new Uint8Array(args.BUFFER.arrayBuffer))
689697
}
690698
fromBase64(args) {
@@ -693,7 +701,8 @@
693701
}
694702
toBase64(args) {
695703
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return "";
696-
const buffer = args.BUFFER
704+
705+
const buffer = new ArrayBufferType(args.BUFFER)
697706
return new Uint8Array(buffer.arrayBuffer).toBase64();
698707
}
699708
async fromUrl(args) {
@@ -704,19 +713,22 @@
704713
}
705714
toDataUrl(args) {
706715
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return "";
707-
const buffer = args.BUFFER
716+
const buffer = new ArrayBufferType(args.BUFFER)
708717
return ("data:application/octet-stream;base64," + new Uint8Array(buffer.arrayBuffer).toBase64())
709718
}
710719
maxReporterLines(args) {
711-
vm.agBuffer.maxReporterRows = args.LINES
720+
vm.agBuffer.maxReporterRows = Cast.toNumber(args.LINES)
712721
}
713722
itemsOf(args) {
714723
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return new ArrayBufferType(0);
724+
args.BUFFER = new ArrayBufferType(args.BUFFER)
715725
return new agBuffer.Type(args.BUFFER.arrayBuffer.slice(args.MIN, args.MAX))
716726
}
717727
writeSubBuffer(args) {
718-
if (args.BUFFER == undefined) return;
719-
if (args.SUBBUFFER == undefined) return;
728+
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return;
729+
if (args.SUBBUFFER == undefined && !agBuffer.disableErrorHandling) return;
730+
args.BUFFER = new ArrayBufferType(args.BUFFER)
731+
args.SUBBUFFER = new ArrayBufferType(args.SUBBUFFER)
720732
let buffer = args.BUFFER
721733
let subbuffer = args.SUBBUFFER
722734
let startindex = args.INDEX
@@ -727,7 +739,7 @@
727739
}
728740
writeAutoType(args) {
729741
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return 0;
730-
let buffer = args.BUFFER
742+
let buffer = new ArrayBufferType(args.BUFFER)
731743
let value = args.VALUE
732744
let index = args.INDEX
733745
let endian = args.ENDIAN
@@ -738,27 +750,28 @@
738750
}
739751
resize(args) {
740752
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return new ArrayBufferType(args.SIZE);
741-
let buffer = args.BUFFER
742-
let newSize = args.SIZE
753+
let buffer = new ArrayBufferType(args.BUFFER)
754+
let newSize = Cast.toNumber(args.SIZE)
743755
return new agBuffer.Type(buffer.arrayBuffer.transfer(newSize))
744756
}
745757
copy(args) {
746758
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return new ArrayBufferType(0);
759+
args.BUFFER = new ArrayBufferType(args.BUFFER)
747760
return new ArrayBufferType(args.BUFFER.arrayBuffer.transfer())
748761
}
749762
reverse(args) {
750-
let buffer = args.BUFFER
763+
let buffer = new ArrayBufferType(args.BUFFER)
751764
buffer.arrayBuffer = new Uint8Array(buffer.arrayBuffer).reverse().buffer
752765
buffer.dataView = new DataView(buffer.arrayBuffer)
753766
}
754767
reverseR(args) {
755768
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return new ArrayBufferType(0);
756-
let buffer = args.BUFFER
769+
let buffer = new ArrayBufferType(args.BUFFER)
757770
return new ArrayBufferType(new Uint8Array(buffer.arrayBuffer).reverse())
758771
}
759772
stringify(args) {
760773
if (args.BUFFER == undefined && !agBuffer.disableErrorHandling) return "";
761-
let buffer = args.BUFFER
774+
let buffer = new ArrayBufferType(args.BUFFER)
762775
let mode = args.MODE
763776
switch (mode) {
764777
case "array":
@@ -772,7 +785,7 @@
772785
}
773786
}
774787
errorHandling(args) {
775-
agBuffer.disableErrorHandling = args.VALUE
788+
agBuffer.disableErrorHandling = Cast.toBoolean(args.VALUE)
776789
}
777790
forEachV({}, util) {
778791
const pair = util.thread.stackFrames[0].agBuffer;
@@ -781,6 +794,7 @@
781794

782795
forEach({BUFFER}, util) {
783796
if (BUFFER == undefined && !agBuffer.disableErrorHandling) return;
797+
BUFFER = new ArrayBufferType(BUFFER)
784798
if (util.stackFrame.execute) {
785799
const { entries, pointer } = util.stackFrame;
786800
util.stackFrame.pointer++;
@@ -799,12 +813,7 @@
799813
}
800814

801815
}
802-
(async () => {
803-
if (!vm.runtime.ext_jwArray) vm.extensionManager.loadExtensionIdSync('jwArray')
804-
vm.runtime.requestBlocksUpdate()
805-
vm.runtime.requestToolboxExtensionsUpdate()
806-
vm.emitWorkspaceUpdate()
807-
})()
816+
808817
vm.agBuffer = agBuffer
809818
let extension = new Extension();
810819
Scratch.extensions.register(extension);

0 commit comments

Comments
 (0)