Skip to content

Commit

Permalink
Merge pull request HaxeFoundation#29 from frabbit/genpy
Browse files Browse the repository at this point in the history
use Internal class to access internal identifiers
  • Loading branch information
Simn committed Apr 6, 2014
2 parents 6c49a8b + c4b1ce1 commit 5e9c1e1
Show file tree
Hide file tree
Showing 3 changed files with 220 additions and 37 deletions.
46 changes: 24 additions & 22 deletions std/python/Boot.hx
Expand Up @@ -3,6 +3,7 @@ package python;


import python.internal.ArrayImpl;
import python.internal.Internal;
import python.internal.StringImpl;
import python.internal.EnumImpl;
import python.internal.HxOverrides;
Expand All @@ -11,7 +12,6 @@ import python.internal.AnonObject;

import python.Syntax;


private extern class Set <T>
{
public inline function has (v:T):Bool
Expand Down Expand Up @@ -40,12 +40,13 @@ import math as _hx_math
@:keep class Boot {

@:keep static function __init__ () {
Syntax.importAs("inspect", "_hx_boot_inspect");
Boot.inspect = Syntax.pythonCode("_hx_boot_inspect");
Internal.importAsPrefixed("inspect", "boot_inspect");
Boot.inspect = Internal.pythonCodePrefixed("boot_inspect");

Boot.builtin = Syntax.pythonCode("_hx_builtin");
Boot.builtin = Internal.pythonCodePrefixed("builtin");
}


inline static function mkSet <T>(a:Array<T>):Set<T> return Syntax.callField(builtin, "set", a);

static var keywords:Set<String> = mkSet(
Expand Down Expand Up @@ -229,6 +230,7 @@ import math as _hx_math
}
if (isInstance(o, Enum)) {

var o:EnumImpl = o;

var l = builtinLen(o.params);
var hasParams = l > 0;
Expand All @@ -248,21 +250,21 @@ import math as _hx_math
}


if (builtinHasAttr(o, "_hx_class_name") && Syntax.field(Syntax.field(o, "__class__"), "__name__") != "type") {
if (builtinHasAttr(o, Internal.classNameVal()) && Syntax.field(Syntax.field(o, "__class__"), "__name__") != "type") {

var fields = getInstanceFields(o);
var fieldsStr = [for (f in fields) '$f : ${toString1(field(o,f), s+"\t")}'];

var toStr = o._hx_class_name + "( " + arrayJoin(fieldsStr, ", ") + " )";
var toStr = Internal.fieldClassName(o) + "( " + arrayJoin(fieldsStr, ", ") + " )";
return toStr;
}

if (builtinHasAttr(o, "_hx_class_name") && Syntax.field(Syntax.field(o, "__class__"), "__name__") == "type") {
if (builtinHasAttr(o, Internal.classNameVal()) && Syntax.field(Syntax.field(o, "__class__"), "__name__") == "type") {

var fields = getClassFields(o);
var fieldsStr = [for (f in fields) '$f : ${toString1(field(o,f), s+"\t")}'];

var toStr = "#" + o._hx_class_name + "( " + arrayJoin(fieldsStr, ", ") + " )";
var toStr = "#" + Internal.fieldClassName(o) + "( " + arrayJoin(fieldsStr, ", ") + " )";
return toStr;
}
if (o == String) {
Expand Down Expand Up @@ -304,16 +306,16 @@ import math as _hx_math
var a = [];
if (o != null)
{
if (builtinHasAttr(o, "_hx_fields"))
if (builtinHasAttr(o, Internal.fieldsVal()))
{
var fields:Array<String> = Syntax.field(o, "_hx_fields");
var fields:Array<String> = Internal.fieldFields(o);
return fields.copy();
}
if (isInstance(o, AnonObject))
{

var d:Dynamic = Syntax.field(o, "__dict__");
var keys = d.keys();
var keys = d.keys();
var handler = unhandleKeywords;

Syntax.pythonCode("for k in keys:");
Expand All @@ -323,8 +325,8 @@ import math as _hx_math
{
var a = [];
var d:Dynamic = Syntax.field(o, "__dict__");
var keys = d.keys();
Syntax.pythonCode("for k in keys:");
var keys1 = d.keys();
Syntax.pythonCode("for k in keys1:");
Syntax.pythonCode(" a.append(k)");

}
Expand Down Expand Up @@ -384,9 +386,9 @@ import math as _hx_math


static function getInstanceFields( c : Class<Dynamic> ) : Array<String> {
var f = if (builtinHasAttr(c, "_hx_fields")) {
var x:Array<String> = Syntax.field(c, "_hx_fields");
var x2:Array<String> = Syntax.field(c, "_hx_methods");
var f = if (builtinHasAttr(c, Internal.fieldsVal())) {
var x:Array<String> = Internal.fieldFields(c);
var x2:Array<String> = Internal.fieldMethods(c);
x.concat(x2);
} else {
[];
Expand Down Expand Up @@ -415,8 +417,8 @@ import math as _hx_math
return null;

try {
if (builtinHasAttr(c, "_hx_super")) {
return Syntax.field(c, "_hx_super");
if (builtinHasAttr(c, Internal.superVal())) {
return Internal.fieldSuper(c);
}
return null;
} catch (e:Dynamic) {
Expand All @@ -427,8 +429,8 @@ import math as _hx_math
}

static function getClassFields( c : Class<Dynamic> ) : Array<String> {
if (builtinHasAttr(c, "_hx_statics")) {
var x:Array<String> = Syntax.field(c, "_hx_statics");
if (builtinHasAttr(c, Internal.staticsVal()) ) {
var x:Array<String> = Internal.fieldStatics(c);
return x.copy();
} else {
return [];
Expand All @@ -440,14 +442,14 @@ import math as _hx_math
static inline function handleKeywords(name:String):String
{
if (keywords.has(name)) {
return "_hx_" + name;
return Internal.getPrefixed(name);
}
return name;
}

static function unhandleKeywords(name:String):String
{
if (name.substr(0,4) == "_hx_") {
if (name.substr(0,4) == Internal.prefix()) {
var real = name.substr(4);
if (keywords.has(real)) return real;
}
Expand Down
31 changes: 16 additions & 15 deletions std/python/_std/Type.hx
@@ -1,5 +1,6 @@
import python.internal.AnonObject;
import python.internal.EnumImpl;
import python.internal.Internal;
import python.lib.Builtin;
import python.Syntax;

Expand Down Expand Up @@ -51,8 +52,8 @@ enum ValueType {

if (python.Boot.isAnonObject(o)) return null;

if (Builtin.hasattr(o, "_hx_class")) {
return Syntax.field(o, "_hx_class");
if (Builtin.hasattr(o, Internal.classVal())) {
return Internal.fieldClass(o);
}
if (Builtin.hasattr(o, "__class__")) {
return Syntax.field(o, "__class__");
Expand All @@ -76,8 +77,8 @@ enum ValueType {
public static function getClassName( c : Class<Dynamic> ) : String
{

if (Builtin.hasattr(c, "_hx_class_name")) {
return Syntax.field(c, "_hx_class_name");
if (Builtin.hasattr(c, Internal.classNameVal())) {
return Internal.fieldClassName(c);
} else {
// not a haxe class
if (c == Array) return "Array";
Expand All @@ -97,16 +98,16 @@ enum ValueType {
}

public static function getEnumName( e : Enum<Dynamic> ) : String {
return Syntax.field(e, "_hx_class_name");
return Internal.fieldClassName(e);
}

public static function resolveClass( name : String ) : Class<Dynamic>
{

if (name == "Array") return Array;
if (name == "Math") return Math;
if (name == "String") return String;
var cl : Class<Dynamic> = (untyped _hx_classes : python.lib.Types.Dict<String, Class<Dynamic>>).get(name, null);

var cl : Class<Dynamic> = Internal.classRegistry().get(name, null);
// ensure that this is a class
if( cl == null || !python.Boot.isClass(cl) )
return null;
Expand All @@ -116,7 +117,7 @@ enum ValueType {
public static function resolveEnum( name : String ) : Enum<Dynamic> {
if (name == "Bool") return cast Bool;
var o = resolveClass(name);
return if (Builtin.hasattr(o, "_hx_constructs")) cast o else null;
return if (Builtin.hasattr(o, Internal.constructsVal())) cast o else null;
}

public static function createInstance<T>( cl : Class<T>, args : Array<Dynamic> ) : T
Expand Down Expand Up @@ -157,8 +158,8 @@ enum ValueType {
if (sc != null) {
callInit(sc);
}
if (Builtin.hasattr(cl, "_hx_empty_init")) {
Syntax.callField(cl, "_hx_empty_init", i);
if (Builtin.hasattr(cl, Internal.emptyInitVal())) {
Internal.callEmptyInit(cl, i);
}
}
callInit(cl);
Expand All @@ -182,7 +183,7 @@ enum ValueType {

public static function createEnumIndex<T>( e : Enum<T>, index : Int, ?params : Array<Dynamic> ) : T {

var c : String = Syntax.field(e, "_hx_constructs")[index];
var c : String = Internal.fieldConstructs(e)[index];
if( c == null ) throw index+" is not a valid enum constructor index";
return createEnum(e,c,params);
}
Expand All @@ -196,8 +197,8 @@ enum ValueType {
}

public static function getEnumConstructs( e : Enum<Dynamic> ) : Array<String> {
if (Builtin.hasattr(e, "_hx_constructs")) {
var x:Array<String> = Syntax.field(e, "_hx_constructs");
if (Builtin.hasattr(e, Internal.constructsVal())) {
var x:Array<String> = Internal.fieldConstructs(e);
return x.copy();
} else {
return [];
Expand Down Expand Up @@ -225,7 +226,7 @@ enum ValueType {
else if (Builtin.isinstance(v, Enum)) {
return TEnum(Syntax.field(v, "__class__"));
}
else if (Builtin.isinstance(v, Builtin.type) || Builtin.hasattr(v, "_hx_class")) {
else if (Builtin.isinstance(v, Builtin.type) || Builtin.hasattr(v, Internal.classVal())) {
return TClass(Syntax.field(v, "__class__"));
} else if (Builtin.callable(v)) {
return TFunction;
Expand Down Expand Up @@ -254,7 +255,7 @@ enum ValueType {
return false;
//var e = Type.getClass(a);

if( Syntax.field(a, "_hx_class") != Syntax.field(b, "_hx_class"))
if( Internal.fieldClass(a) != Internal.fieldClass(b))
return false;
} catch( e : Dynamic ) {
return false;
Expand Down

0 comments on commit 5e9c1e1

Please sign in to comment.