add stone function
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
(function engine() {
|
||||
prosperon.DOC = prosperon.hidden.DOCSYM
|
||||
|
||||
globalThis.pi = 3.1415926535897932
|
||||
|
||||
function caller_data(depth = 0)
|
||||
{
|
||||
@@ -221,7 +223,33 @@ globalThis.use = function use(file, ...args) {
|
||||
globalThis.json = use('json')
|
||||
var time = use('time')
|
||||
|
||||
use('blob')
|
||||
var blob = use('blob')
|
||||
|
||||
function deepFreeze(object) {
|
||||
if (object instanceof blob)
|
||||
object.stone()
|
||||
|
||||
// Retrieve the property names defined on object
|
||||
var propNames = Object.keys(object);
|
||||
|
||||
// Freeze properties before freezing self
|
||||
for (var name of propNames) {
|
||||
var value = object[name];
|
||||
|
||||
if ((value && typeof value === "object") || typeof value === "function") {
|
||||
deepFreeze(value);
|
||||
}
|
||||
}
|
||||
|
||||
return Object.freeze(object);
|
||||
}
|
||||
|
||||
globalThis.stone = deepFreeze
|
||||
stone.p = function(object)
|
||||
{
|
||||
return Object.isFrozen(object)
|
||||
}
|
||||
|
||||
var DOCPATH = 'scripts/core/doc.js'
|
||||
var script = io.slurp(DOCPATH)
|
||||
var fnname = "doc"
|
||||
|
||||
@@ -376,5 +376,6 @@ JSValue js_io_use(JSContext *js) {
|
||||
|
||||
JSValue mod = JS_NewObject(js);
|
||||
JS_SetPropertyFunctionList(js,mod,js_io_funcs,countof(js_io_funcs));
|
||||
|
||||
return mod;
|
||||
}
|
||||
|
||||
@@ -196,7 +196,7 @@ let tests = [
|
||||
}
|
||||
|
||||
// Stone it
|
||||
b.stone();
|
||||
stone(b)
|
||||
|
||||
// Now check bits
|
||||
for (let i = 0; i < 5; i++) {
|
||||
@@ -230,7 +230,7 @@ let tests = [
|
||||
}
|
||||
|
||||
// Must stone before reading
|
||||
b.stone();
|
||||
stone(b)
|
||||
|
||||
let bits = [
|
||||
b.read_logical(0),
|
||||
@@ -248,7 +248,7 @@ let tests = [
|
||||
run() {
|
||||
let b = new Blob(5, false);
|
||||
// Stone it
|
||||
b.stone();
|
||||
stone(b)
|
||||
// Try to write
|
||||
let passed = true;
|
||||
let messages = [];
|
||||
@@ -286,7 +286,7 @@ let tests = [
|
||||
}
|
||||
|
||||
// Stone the copy to read from it
|
||||
copy.stone();
|
||||
stone(copy)
|
||||
|
||||
let bits = [];
|
||||
for (let i = 0; i < len; i++) {
|
||||
@@ -335,7 +335,7 @@ let tests = [
|
||||
};
|
||||
}
|
||||
|
||||
b1.stone();
|
||||
stone(b1)
|
||||
let bits = [];
|
||||
for (let i = 0; i < 4; i++) {
|
||||
bits.push(b1.read_logical(i));
|
||||
@@ -360,7 +360,7 @@ let tests = [
|
||||
};
|
||||
}
|
||||
|
||||
b.stone();
|
||||
stone(b)
|
||||
|
||||
let val1 = b.read_fit(0, 3);
|
||||
let val2 = b.read_fit(3, 4);
|
||||
@@ -385,7 +385,7 @@ let tests = [
|
||||
b.write_kim(-1); // Small negative number
|
||||
b.write_kim(1000); // Larger number
|
||||
|
||||
b.stone();
|
||||
stone(b)
|
||||
|
||||
let result1 = b.read_kim(0);
|
||||
let result2 = b.read_kim(result1.bits_read);
|
||||
@@ -409,7 +409,7 @@ let tests = [
|
||||
let b = new Blob();
|
||||
b.write_text("Hello");
|
||||
|
||||
b.stone();
|
||||
stone(b)
|
||||
|
||||
let result = b.read_text(0);
|
||||
|
||||
@@ -432,7 +432,7 @@ let tests = [
|
||||
b.write_dec64(3.14159);
|
||||
b.write_dec64(-42.5);
|
||||
|
||||
b.stone();
|
||||
stone(b)
|
||||
|
||||
let val1 = b.read_dec64(0);
|
||||
let val2 = b.read_dec64(64);
|
||||
@@ -470,7 +470,7 @@ let tests = [
|
||||
};
|
||||
}
|
||||
|
||||
b.stone();
|
||||
stone(b)
|
||||
|
||||
// Check pad? function
|
||||
let isPadded = b["pad?"](3, 8);
|
||||
@@ -534,7 +534,7 @@ let tests = [
|
||||
b.write_bit(true);
|
||||
b.write_bit(false);
|
||||
|
||||
b.stone();
|
||||
stone(b)
|
||||
|
||||
let bits = [];
|
||||
for (let i = 0; i < 4; i++) {
|
||||
@@ -553,10 +553,10 @@ let tests = [
|
||||
for (let i = 0; i < 10; i++) {
|
||||
b.write_bit(i % 3 === 0); // Pattern: T,F,F,T,F,F,T,F,F,T
|
||||
}
|
||||
b.stone();
|
||||
stone(b)
|
||||
|
||||
let copy = b.read_blob(3, 7); // Extract bits 3-6
|
||||
copy.stone(); // Need to stone the copy to read
|
||||
stone(copy)
|
||||
|
||||
if (copy.length !== 4) {
|
||||
return {
|
||||
@@ -584,7 +584,7 @@ let tests = [
|
||||
let randomFunc = () => counter++;
|
||||
|
||||
let b = new Blob(8, randomFunc);
|
||||
b.stone();
|
||||
stone(b)
|
||||
|
||||
if (b.length !== 8) {
|
||||
return {
|
||||
|
||||
@@ -17,6 +17,16 @@ var tree = {
|
||||
]
|
||||
}
|
||||
|
||||
stone(tree)
|
||||
|
||||
log.console(tree)
|
||||
|
||||
log.console(stone.p(tree))
|
||||
log.console(stone.p("false"))
|
||||
log.console(stone.p(9))
|
||||
log.console(stone.p(undefined))
|
||||
log.console(stone.p({}))
|
||||
|
||||
var os = use('os')
|
||||
var st = os.now()
|
||||
var actor
|
||||
|
||||
Reference in New Issue
Block a user