Browse Source

Fix record inheritance from another module.

Vladislav Folts 11 years ago
parent
commit
313e6915be
3 changed files with 31 additions and 1 deletions
  1. 3 1
      src/context.js
  2. 17 0
      test/expected/modules.js
  3. 11 0
      test/input/modules.ob

+ 3 - 1
src/context.js

@@ -1663,7 +1663,9 @@ exports.RecordDecl = ChainedContext.extend({
         var type = this.__type;
         var baseType = type.baseType();
         var gen = this.codeGenerator();
-        gen.write((baseType ? baseType.name() : this.rtl().baseClass()) + ".extend(");
+        gen.write((baseType ? this.qualifyScope(baseType.scope()) + baseType.name() 
+                            : this.rtl().baseClass())
+                  + ".extend(");
         gen.openScope();
         gen.write("init: function " + this.__type.cons() + "()");
         gen.openScope();

+ 17 - 0
test/expected/modules.js

@@ -101,9 +101,17 @@ return {
 }
 }();
 var m2 = function (m1){
+var T = m1.T.extend({
+	init: function T(){
+		T.prototype.init.call(this);
+		this.i2 = 0;
+	}
+});
 var r = new m1.T();
+var r2 = new T();
 var pb = null;
 var ptr = null;
+var ptr2 = null;
 var ptrA = null;
 
 function p(i/*INTEGER*/){
@@ -114,6 +122,9 @@ function ref(i/*VAR INTEGER*/){
 ptr = new m1.T();
 pb = ptr;
 RTL$.typeGuard(pb, m1.T).i = 123;
+ptr2 = new T();
+ptr2.i = 1;
+ptr2.i2 = 2;
 ptrA = m1.makeTPA();
 m1.p();
 p(m1.i());
@@ -121,7 +132,13 @@ p(m1.ci);
 ref(RTL$.makeRef(m1.pr2(), "i"));
 }(m1);
 var m3 = function (m1, m2){
+var T = m2.T.extend({
+	init: function T(){
+		T.prototype.init.call(this);
+	}
+});
 var r = new m2.T();
+var r2 = new T();
 var a = RTL$.makeArray(3, function(){return new m2.Base();});
 var ptr = null;
 var pb = null;

+ 11 - 0
test/input/modules.ob

@@ -36,10 +36,14 @@ END m1.
 MODULE m2;
 IMPORT m1;
 
+TYPE
+	T = RECORD(m1.T) i2: INTEGER END;
 VAR 
 	r: m1.T;
+	r2: T;
 	pb: POINTER TO m1.Base;
 	ptr: m1.TP;
+	ptr2: POINTER TO T;
 	ptrA: m1.TPA;
 
 PROCEDURE p(i: INTEGER);
@@ -53,6 +57,10 @@ BEGIN
 	pb := ptr;
 	pb(m1.TP).i := 123;
 
+	NEW(ptr2);
+	ptr2.i := 1;
+	ptr2.i2 := 2;
+
 	ptrA := m1.makeTPA();
 
 	m1.p();
@@ -63,8 +71,11 @@ END m2.
 
 MODULE m3;
 IMPORT m1 := m2, m2 := m1;
+TYPE
+	T = RECORD(m2.T) END;
 VAR 
     r: m2.T;
+	r2: T;
     a: ARRAY 3 OF m2.Base;
     ptr: m2.TP;
     pb: POINTER TO m2.Base;