diff --git a/src/main/java/org/yinwang/rubysonar/ast/Call.java b/src/main/java/org/yinwang/rubysonar/ast/Call.java index a7d4d9f..26099c4 100644 --- a/src/main/java/org/yinwang/rubysonar/ast/Call.java +++ b/src/main/java/org/yinwang/rubysonar/ast/Call.java @@ -82,10 +82,13 @@ public Type transform(State s) { } } - // Class.new Name newName = null; + Type clsType = null; if (func instanceof Attribute) { Attribute afun = (Attribute) func; + clsType = afun.target.transform(s); + + // Class.new if (afun.attr.id.equals("new")) { func = afun.target; newName = afun.attr; @@ -104,6 +107,13 @@ public Type transform(State s) { } Type fun = transformExpr(func, s); + + // `self` refers to current class + if (clsType != null && fun instanceof FunType) { + ((FunType) fun).env.update( + Constants.SELFNAME, clsType.table.lookupAttr(Constants.SELFNAME)); + } + List pos = resolveList(args, s); Map hash = new HashMap<>();