Skip to content

Commit

Permalink
fix: various fixes, jobject construction replace new operator
Browse files Browse the repository at this point in the history
  • Loading branch information
alekitto committed Nov 5, 2023
1 parent 13548c3 commit e196275
Show file tree
Hide file tree
Showing 20 changed files with 785 additions and 309 deletions.
4 changes: 3 additions & 1 deletion .mocha.setup.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@
// to use same assertion between node-swc & rest.
require('@jymfony/util');
global.expect = require('expect');
global.__jymfony.JObject = class {};
global.__jymfony.JObject = class {
__construct() {}
};
1 change: 1 addition & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ exports.start = start;
exports.getReflectionData = require('./lib/reflection').getReflectionData;

global._apply_decs_2203_r = require('./lib/_apply_decs_2203_r')._;
global._construct_jobject = require('./lib/_construct_jobject')._;
global.__jymfony_reflect = require('./lib/reflection')._;
2 changes: 1 addition & 1 deletion lib/_apply_decs_2203_r.js
Original file line number Diff line number Diff line change
Expand Up @@ -672,7 +672,7 @@ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
return Object.defineProperty(
Class,
Symbol.metadata || Symbol.for('Symbol.metadata'),
{ configurable: false, enumerable: false, value: metadata },
{ configurable: true, enumerable: false, value: metadata },
);
}

Expand Down
104 changes: 104 additions & 0 deletions lib/_construct_jobject.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
exports._ = function _construct_jobject(callee, ...$args) {
let c,
r = new callee(...$args);
if (callee === Proxy) {
return r;
}

if (global.__jymfony !== void 0 && r instanceof __jymfony.JObject) {
c = r.__construct(...$args);
}

if (
void 0 !== global.mixins &&
void 0 !== r[global.mixins.initializerSymbol]
) {
r[global.mixins.initializerSymbol](...$args);
}

if (c !== void 0 && r !== c) {
return c;
}

let self = r;
if (
global.__jymfony !== void 0 &&
r instanceof __jymfony.JObject &&
__jymfony.autoload !== void 0 &&
__jymfony.autoload.debug
) {
Reflect.preventExtensions(self);
// self = new Proxy(self, {
// get: (target, p) => {
// if (p !== Symbol.toStringTag && ! Reflect.has(target, p)) {
// throw new TypeError('Undefined property ' + p.toString() + ' on instance of ' + ReflectionClass.getClassName(target));
// }
//
// return Reflect.get(target, p);
// },
// });
}

if (Reflect.has(r, '__invoke')) {
return new Proxy(self.__invoke, {
get: (_, key) => {
if (Symbol.for('jymfony.namespace.class') === key) {
return self;
}

return Reflect.get(self, key);
},
set(_, p, newValue, receiver) {
return Reflect.set(self, p, newValue, receiver);
},
has(_, p) {
return Reflect.has(self, p);
},
deleteProperty(_, p) {
return Reflect.deleteProperty(self, p);
},
defineProperty(_, property, attributes) {
return Reflect.defineProperty(self, property, attributes);
},
enumerate(_) {
return Reflect.enumerate(self);
},
ownKeys(_) {
return Reflect.ownKeys(self);
},
apply: (_, ctx, args) => {
return self.__invoke(...args);
},
construct(_, argArray, newTarget) {
return Reflect.construct(self, argArray, newTarget);
},
getPrototypeOf(_) {
return Reflect.getPrototypeOf(self);
},
setPrototypeOf(_, v) {
return Reflect.setPrototypeOf(self, v);
},
isExtensible(_) {
return Reflect.isExtensible(self);
},
preventExtensions(_) {
Reflect.preventExtensions(self);

return false;
},
getOwnPropertyDescriptor(target, key) {
if (Symbol.for('jymfony.namespace.class') === key) {
return {
configurable: true,
enumerable: false,
value: self,
};
}

return Reflect.getOwnPropertyDescriptor(self, key);
},
});
}

return self;
};
64 changes: 46 additions & 18 deletions lib/reflection.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,46 @@ function docblockGetter(classId, memberIndex) {
return member.docblock || null;
}

function parametersGetter(classId, memberIndex) {
const data = getInternalReflectionData(classId);
if (data === void 0) {
return [];
}

const member = data.members[memberIndex];

return member.params.map((p) => {
const { scalarDefault, ...parameter } = p;
if (scalarDefault) {
switch (scalarDefault.type) {
case 'Str':
parameter.default = scalarDefault.value;
break;
case 'Bool':
parameter.default = scalarDefault.value;
break;
case 'Num':
parameter.default = scalarDefault.value;
break;
case 'Null':
parameter.default = null;
break;
case 'BigInt':
parameter.default = BigInt(scalarDefault.value);
break;
case 'Regex':
parameter.default = new RegExp(
scalarDefault.value.exp,
scalarDefault.value.flags,
);
break;
}
}

return parameter;
});
}

/**
* @param {string} classId
* @param {number|undefined} memberIndex
Expand Down Expand Up @@ -57,14 +97,7 @@ exports._ = function __jymfony_reflect(classId, memberIndex = undefined) {
return docblockGetter(classId, memberIndex);
},
get parameters() {
const data = getInternalReflectionData(classId);
if (data === void 0) {
return [];
}

const member = data.members[memberIndex];

return member.params.map((p) => ({ ...p }));
return parametersGetter(classId, memberIndex);
},
});
}
Expand All @@ -90,14 +123,7 @@ exports._ = function __jymfony_reflect(classId, memberIndex = undefined) {
private: context.private,
access: context.access,
get parameters() {
const data = getInternalReflectionData(classId);
if (data === void 0) {
return [];
}

const member = data.members[memberIndex];

return member.params.map((p) => ({ ...p }));
return parametersGetter(classId, memberIndex);
},
get docblock() {
return docblockGetter(classId, memberIndex);
Expand Down Expand Up @@ -128,8 +154,10 @@ exports.getReflectionData = function getReflectionData(classIdOrValue) {
return undefined;
}

const metadata =
classIdOrValue[Symbol.metadata || Symbol.for('Symbol.metadata')];
const sym = Symbol.metadata || Symbol.for('Symbol.metadata');
const metadata = classIdOrValue.hasOwnProperty(sym)
? classIdOrValue[sym]
: void 0;
if (metadata !== void 0 && metadata[reflectionSymbol] !== void 0) {
classIdOrValue = metadata[reflectionSymbol];
}
Expand Down
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@jymfony/compiler",
"version": "0.5.0-alpha.2",
"version": "0.5.0-beta.1",
"type": "commonjs",
"author": "Alessandro Chitolina <[email protected]>",
"license": "MIT",
Expand All @@ -9,7 +9,7 @@
"build": "wasm-pack build --out-name compiler --target nodejs --dev && RUSTFLAGS=\"-C target-feature=+simd128\" wasm-pack build --out-dir simd --out-name compiler --target nodejs --dev --features=simd --target-dir=simd-target",
"pretest": "npm run build",
"test": "mocha tests/wasm/",
"prepublishOnly": "npm run build-release && bash -c 'rm {pkg,simd}/{.gitignore,package.json}'"
"prepublishOnly": "npm run build-release && bash -c 'rm {pkg,simd}/{.gitignore,package.json,LICENSE}'"
},
"main": "index.js",
"types": "index.d.ts",
Expand All @@ -23,6 +23,7 @@
"index.js",
"index.d.ts",
"lib/_apply_decs_2203_r.js",
"lib/_construct_jobject.js",
"lib/reflection.js",
"pkg/compiler.js",
"pkg/compiler.d.ts",
Expand Down
4 changes: 2 additions & 2 deletions src/parser/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ class y extends (__jymfony_JObject2 = __jymfony.JObject) {
f() {
var _initClass, __anonymous_xΞ2, _dec, __jymfony_JObject, _dec1, _initProto;
_dec = __jymfony_reflect("00000000-0000-0000-0000-000000000003", void 0), _dec1 = __jymfony_reflect("00000000-0000-0000-0000-000000000003", 0);
return new (class _anonymous_xΞ2 extends (__jymfony_JObject = __jymfony.JObject) {
return _construct_jobject((class _anonymous_xΞ2 extends (__jymfony_JObject = __jymfony.JObject) {
static #_ = { e: [_initProto], c: [__anonymous_xΞ2, _initClass] } = _apply_decs_2203_r(this, [
[
_dec1,
Expand All @@ -281,7 +281,7 @@ class y extends (__jymfony_JObject2 = __jymfony.JObject) {
return __anonymous_xΞ2;
}
static #_2 = _initClass();
}, __anonymous_xΞ2);
}, __anonymous_xΞ2));
}
static #_2 = _initClass2();
}
Expand Down
Loading

0 comments on commit e196275

Please sign in to comment.