Browse Source

pastojs: fixed typeinfo module path

git-svn-id: trunk@35803 -
Mattias Gaertner 8 years ago
parent
commit
975b5b8007

+ 10 - 11
packages/pastojs/src/fppas2js.pp

@@ -1078,7 +1078,7 @@ type
     // Name mangling
     // Name mangling
     Function TransformVariableName(El: TPasElement; Const AName: String; AContext : TConvertContext): String; virtual;
     Function TransformVariableName(El: TPasElement; Const AName: String; AContext : TConvertContext): String; virtual;
     Function TransformVariableName(El: TPasElement; AContext : TConvertContext) : String; virtual;
     Function TransformVariableName(El: TPasElement; AContext : TConvertContext) : String; virtual;
-    Function TransformModuleName(El: TPasModule; AContext : TConvertContext) : String; virtual;
+    Function TransformModuleName(El: TPasModule; AddModulesPrefix: boolean; AContext : TConvertContext) : String; virtual;
     Function IsPreservedWord(const aName: string): boolean; virtual;
     Function IsPreservedWord(const aName: string): boolean; virtual;
     // Never create an element manually, always use the below functions
     // Never create an element manually, always use the below functions
     Function IsElementUsed(El: TPasElement): boolean; virtual;
     Function IsElementUsed(El: TPasElement): boolean; virtual;
@@ -3205,7 +3205,7 @@ begin
   RegModuleCall.Args:=ArgArray;
   RegModuleCall.Args:=ArgArray;
 
 
   // add unitname parameter: unitname
   // add unitname parameter: unitname
-  ModuleName:=TransformModuleName(El,AContext);
+  ModuleName:=TransformModuleName(El,false,AContext);
   ArgArray.Elements.AddElement.Expr:=CreateLiteralString(El,ModuleName);
   ArgArray.Elements.AddElement.Expr:=CreateLiteralString(El,ModuleName);
 
 
   // add interface-uses-section parameter: [<interface uses1>,<uses2>, ...]
   // add interface-uses-section parameter: [<interface uses1>,<uses2>, ...]
@@ -4264,7 +4264,7 @@ begin
     writeln('TPasToJSConverter.ConvertIdentifierExpr ',GetObjName(El),' Decl=',GetObjName(Decl),' Decl.Parent=',GetObjName(Decl.Parent));
     writeln('TPasToJSConverter.ConvertIdentifierExpr ',GetObjName(El),' Decl=',GetObjName(Decl),' Decl.Parent=',GetObjName(Decl.Parent));
     {$ENDIF}
     {$ENDIF}
     if Decl is TPasModule then
     if Decl is TPasModule then
-      Name:=FBuiltInNames[pbivnModules]+'.'+TransformModuleName(TPasModule(Decl),AContext)
+      Name:=TransformModuleName(TPasModule(Decl),true,AContext)
     else if (Decl is TPasFunctionType) and (CompareText(ResolverResultVar,El.Value)=0) then
     else if (Decl is TPasFunctionType) and (CompareText(ResolverResultVar,El.Value)=0) then
       Name:=ResolverResultVar
       Name:=ResolverResultVar
     else if Decl.ClassType=TPasEnumValue then
     else if Decl.ClassType=TPasEnumValue then
@@ -8543,7 +8543,7 @@ begin
       if AContext.GetThis=aModule then
       if AContext.GetThis=aModule then
         aModName:='this'
         aModName:='this'
       else
       else
-        aModName:=TransformModuleName(aModule,AContext);
+        aModName:=TransformModuleName(aModule,true,AContext);
       Bracket:=TJSBracketMemberExpression(CreateElement(TJSBracketMemberExpression,El));
       Bracket:=TJSBracketMemberExpression(CreateElement(TJSBracketMemberExpression,El));
       Bracket.MExpr:=CreateMemberExpression([aModName,FBuiltInNames[pbivnRTTI]]);
       Bracket.MExpr:=CreateMemberExpression([aModName,FBuiltInNames[pbivnRTTI]]);
       Bracket.Name:=CreateLiteralString(El,aName);
       Bracket.Name:=CreateLiteralString(El,aName);
@@ -8632,8 +8632,7 @@ begin
     RttiPath:='this'
     RttiPath:='this'
   else
   else
     begin
     begin
-    RttiPath:=CallFuncName+'.'
-      +TransformModuleName(ThisContext.GetRootModule,AContext);
+    RttiPath:=TransformModuleName(ThisContext.GetRootModule,true,AContext);
     end;
     end;
   Call:=CreateCallExpression(El);
   Call:=CreateCallExpression(El);
   try
   try
@@ -10117,8 +10116,7 @@ begin
             Prepend(Result,FBuiltInNames[pbivnImplementation])
             Prepend(Result,FBuiltInNames[pbivnImplementation])
           else
           else
             // in other unit -> use pas.unitname.$impl
             // in other unit -> use pas.unitname.$impl
-            Prepend(Result,FBuiltInNames[pbivnModules]
-               +'.'+TransformModuleName(FoundModule,AContext)
+            Prepend(Result,TransformModuleName(FoundModule,true,AContext)
                +'.'+FBuiltInNames[pbivnImplementation]);
                +'.'+FBuiltInNames[pbivnImplementation]);
           end;
           end;
         break;
         break;
@@ -10129,8 +10127,7 @@ begin
         if ParentEl=This then
         if ParentEl=This then
           Prepend(Result,'this')
           Prepend(Result,'this')
         else
         else
-          Prepend(Result,FBuiltInNames[pbivnModules]
-            +'.'+TransformModuleName(TPasModule(ParentEl),AContext));
+          Prepend(Result,TransformModuleName(TPasModule(ParentEl),true,AContext));
         break;
         break;
         end
         end
       else if (ParentEl.ClassType=TPasClassType)
       else if (ParentEl.ClassType=TPasClassType)
@@ -11221,12 +11218,14 @@ begin
 end;
 end;
 
 
 function TPasToJSConverter.TransformModuleName(El: TPasModule;
 function TPasToJSConverter.TransformModuleName(El: TPasModule;
-  AContext: TConvertContext): String;
+  AddModulesPrefix: boolean; AContext: TConvertContext): String;
 begin
 begin
   if El is TPasProgram then
   if El is TPasProgram then
     Result:='program'
     Result:='program'
   else
   else
     Result:=TransformVariableName(El,AContext);
     Result:=TransformVariableName(El,AContext);
+  if AddModulesPrefix then
+    Result:=FBuiltInNames[pbivnModules]+'.'+Result;
 end;
 end;
 
 
 function TPasToJSConverter.IsPreservedWord(const aName: string): boolean;
 function TPasToJSConverter.IsPreservedWord(const aName: string): boolean;

+ 6 - 6
packages/pastojs/tests/tcmodules.pas

@@ -10793,7 +10793,7 @@ begin
     LinesToStr([ // statements
     LinesToStr([ // statements
     'var $impl = this.$impl;',
     'var $impl = this.$impl;',
     'this.$rtti.$ProcVar("TProcA", {',
     'this.$rtti.$ProcVar("TProcA", {',
-    '  procsig: rtl.newTIProcSig([["o", unit2.$rtti["TObject"]]], unit2.$rtti["TObject"])',
+    '  procsig: rtl.newTIProcSig([["o", pas.unit2.$rtti["TObject"]]], pas.unit2.$rtti["TObject"])',
     '});',
     '});',
     '']),
     '']),
     LinesToStr([ // this.$init
     LinesToStr([ // this.$init
@@ -10802,7 +10802,7 @@ begin
     '']),
     '']),
     LinesToStr([ // implementation
     LinesToStr([ // implementation
     'this.$rtti.$ProcVar("TProcB", {',
     'this.$rtti.$ProcVar("TProcB", {',
-    '  procsig: rtl.newTIProcSig([["o", unit2.$rtti["TObject"]]], unit2.$rtti["TObject"])',
+    '  procsig: rtl.newTIProcSig([["o", pas.unit2.$rtti["TObject"]]], pas.unit2.$rtti["TObject"])',
     '});',
     '});',
     '$impl.p = null;',
     '$impl.p = null;',
     '']) );
     '']) );
@@ -11357,9 +11357,9 @@ begin
     '    pas.program.TObject.$final.call(this);',
     '    pas.program.TObject.$final.call(this);',
     '  };',
     '  };',
     '  var $r = this.$rtti;',
     '  var $r = this.$rtti;',
-    '  $r.addField("FBridge", program.$rtti["TBridge"]);',
-    '  $r.addMethod("SetBridge", 0, [["Value", program.$rtti["TBridge"]]]);',
-    '  $r.addProperty("Bridge", 2, program.$rtti["TBridge"], "FBridge", "SetBridge");',
+    '  $r.addField("FBridge", pas.program.$rtti["TBridge"]);',
+    '  $r.addMethod("SetBridge", 0, [["Value", pas.program.$rtti["TBridge"]]]);',
+    '  $r.addProperty("Bridge", 2, pas.program.$rtti["TBridge"], "FBridge", "SetBridge");',
     '});',
     '});',
     'rtl.createClass(this, "TBridge", this.TObject, function () {',
     'rtl.createClass(this, "TBridge", this.TObject, function () {',
     '  this.$init = function () {',
     '  this.$init = function () {',
@@ -11418,7 +11418,7 @@ begin
     '    this.C = undefined;',
     '    this.C = undefined;',
     '  };',
     '  };',
     '  var $r = this.$rtti;',
     '  var $r = this.$rtti;',
-    '  $r.addField("C", program.$rtti["TClass"]);',
+    '  $r.addField("C", pas.program.$rtti["TClass"]);',
     '});',
     '});',
     'this.$rtti.$Class("TFox");',
     'this.$rtti.$Class("TFox");',
     'rtl.createClass(this, "TBird", this.TObject, function () {',
     'rtl.createClass(this, "TBird", this.TObject, function () {',

+ 1 - 1
packages/pastojs/tests/tcoptimizations.pas

@@ -810,7 +810,7 @@ begin
     '      this.PublishedB = undefined;',
     '      this.PublishedB = undefined;',
     '    };',
     '    };',
     '    var $r = this.$rtti;',
     '    var $r = this.$rtti;',
-    '    $r.addField("PublishedB", program.$rtti["TArrB"]);',
+    '    $r.addField("PublishedB", pas.program.$rtti["TArrB"]);',
     '  });',
     '  });',
     '  this.C = null;',
     '  this.C = null;',
     '  this.$main = function () {',
     '  this.$main = function () {',