"Type" for Custom Classes

This commit is contained in:
Jaime Humberto Macias Bustamante
2025-03-24 20:28:29 -07:00
parent 73c17e51dc
commit e71f5a0471
3 changed files with 56 additions and 25 deletions
+15 -13
View File
@@ -11,6 +11,8 @@ using Lambda;
using StringTools;
/**
* The Custom Class core.
*
* Provides handlers for custom classes.
* Based on Polymod Hscript class system
* @see https://github.com/larsiusprime/polymod/tree/master/polymod/hscript/_internal
@@ -23,6 +25,15 @@ class CustomClass implements IHScriptCustomAccessBehaviour {
public var superConstructor(default, null):Dynamic;
public var className(get, never):String;
private function get_className():String {
// TODO: simplify this
var name = "";
if (__class.pkg != null) {
name += __class.pkg.join(".");
}
name += __class.classDecl.name;
return name;
}
private var __class:CustomClassDecl;
private var _cachedSuperFields:Null<Map<String, Dynamic>> = null;
@@ -33,16 +44,7 @@ class CustomClass implements IHScriptCustomAccessBehaviour {
public var __allowSetGet:Bool = true;
private function get_className():String {
var name = "";
if (__class.pkg != null) {
name += __class.pkg.join(".");
}
name += __class.classDecl.name;
return name;
}
public function new(__class:CustomClassDecl, args:Array<Dynamic>, ?extendFieldDecl:Map<String, Dynamic>, ?ogInterp:Interp) {
public function new(__class:CustomClassDecl, args:Array<Dynamic>, ?extendFieldDecl:Map<String, Dynamic>, ?ogInterp:Interp, ?callNew:Bool = true) {
this.__class = __class;
this.interp = new Interp(this);
@@ -61,7 +63,7 @@ class CustomClass implements IHScriptCustomAccessBehaviour {
buildClass();
if (hasFunction('new')) {
if (hasFunction('new') && callNew) {
buildSuperConstructor();
callFunction('new', args);
if (this.superClass == null && this.__class.classDecl.extend != null)
@@ -132,8 +134,8 @@ class CustomClass implements IHScriptCustomAccessBehaviour {
}
if (Interp.customClassExist(extendString)) {
var abstractSuperClass:CustomClass = new CustomClass(Interp.getCustomClass(extendString), args, _cachedSuperFields, this.interp);
superClass = abstractSuperClass;
var customSuperClass:CustomClass = new CustomClass(Interp.getCustomClass(extendString), args, _cachedSuperFields, this.interp);
superClass = customSuperClass;
} else {
var c = Type.resolveClass('${extendString}_HSX');
if (c == null) {