Browse Source

rtl: less free return null, fixed rc return null, set $ancestor to null

mattias 4 years ago
parent
commit
aafec52c70
1 changed files with 14 additions and 4 deletions
  1. 14 4
      compiler/utils/pas2js/dist/rtl.js

+ 14 - 4
compiler/utils/pas2js/dist/rtl.js

@@ -280,7 +280,7 @@ var rtl = {
       // if root is an "object" then c.$ancestor === Object.getPrototypeOf(c)
       // if root is a "function" then c.$ancestor === c.__proto__, Object.getPrototypeOf(c) returns the root
     } else {
-      c = {};
+      c = { $ancestor: null };
       c.$create = function(fn,args){
         if (args == undefined) args = [];
         var o = Object.create(this);
@@ -314,6 +314,7 @@ var rtl = {
     // If newinstancefnname is given, use that function to create the new object.
     // If exist call BeforeDestruction and AfterConstruction.
     var c = Object.create(ancestor);
+    c.$ancestor = null; // no pascal ancestor
     c.$create = function(fn,args){
       if (args == undefined) args = [];
       var o = null;
@@ -332,6 +333,7 @@ var rtl = {
         if (o.AfterConstruction) o.AfterConstruction();
       } catch($e){
         // do not call BeforeDestruction
+        console.log($e);
         if (o.Destroy) o.Destroy();
         if (o.$final) this.$final();
         throw $e;
@@ -355,7 +357,7 @@ var rtl = {
       c.$ancestor = ancestor;
       // c.$ancestor === Object.getPrototypeOf(c)
     } else {
-      c = {};
+      c = { $ancestor = null };
     };
     parent[name] = c;
     c.$class = c; // Note: o.$class === Object.getPrototypeOf(o)
@@ -374,13 +376,13 @@ var rtl = {
   tObjectDestroy: "Destroy",
 
   free: function(obj,name){
-    if (obj[name]==null) return;
+    if (obj[name]==null) return null;
     obj[name].$destroy(rtl.tObjectDestroy);
     obj[name]=null;
   },
 
   freeLoc: function(obj){
-    if (obj==null) return;
+    if (obj==null) return null;
     obj.$destroy(rtl.tObjectDestroy);
     return null;
   },
@@ -453,6 +455,7 @@ var rtl = {
   EInvalidCast: null,
   EAbstractError: null,
   ERangeError: null,
+  EIntOverflow: null;
   EPropWriteOnly: null,
 
   raiseE: function(typename){
@@ -751,6 +754,12 @@ var rtl = {
     rtl.raiseE("EInvalidCast");
   },
 
+  oc: function(i){
+    // overflow check integer
+    if ((Math.floor(i)===i) && (i>=-0x1fffffffffffff) && (i<=0x1fffffffffffff)) return i;
+    rtl.raiseE('EIntOverflow');
+  },
+
   rc: function(i,minval,maxval){
     // range check integer
     if ((Math.floor(i)===i) && (i>=minval) && (i<=maxval)) return i;
@@ -1095,6 +1104,7 @@ var rtl = {
         s=' '+s;
         l++;
       };
+      return s;
     };
   },