2
0
Vladislav Folts 9 жил өмнө
parent
commit
89ac87908b

BIN
bin/compiled.zip


+ 1 - 2
src/eberon/EberonContextType.ob

@@ -32,8 +32,7 @@ TYPE
         type: Procedure.PType;
         type: Procedure.PType;
     END;
     END;
 
 
-    Map* = RECORD(ContextType.HandleSymbolAsType)
-        PROCEDURE isAnonymousDeclaration*(): BOOLEAN;
+    Map* = RECORD(ContextType.DeclarationHandle)
         PROCEDURE typeName*(): STRING;
         PROCEDURE typeName*(): STRING;
 
 
         type: Types.PStorageType;
         type: Types.PStorageType;

+ 12 - 34
src/ob/ContextType.ob

@@ -10,21 +10,19 @@ TYPE
     END;
     END;
     PHandleSymbolAsType = POINTER TO HandleSymbolAsType;
     PHandleSymbolAsType = POINTER TO HandleSymbolAsType;
 
 
-    FormalType* = RECORD(HandleSymbolAsType)
-        PROCEDURE FormalType(parent: PHandleSymbolAsType);
+    DeclarationHandle* = RECORD(HandleSymbolAsType)
+        PROCEDURE isAnonymousDeclaration*(): BOOLEAN;
+    END;
+    PDeclarationHandle* = POINTER TO DeclarationHandle;
 
 
-        handleType: PHandleSymbolAsType;
+    FormalType* = RECORD(HandleSymbolAsType)
         dimensionCount: INTEGER;
         dimensionCount: INTEGER;
     END;
     END;
 
 
-    Array* = RECORD(HandleSymbolAsType)
-        PROCEDURE Array*(parent: PHandleSymbolAsType);
-
-        PROCEDURE isAnonymousDeclaration(): BOOLEAN;
+    Array* = RECORD(DeclarationHandle)
         PROCEDURE doMakeInit*(type: Types.PStorageType; dimensions: STRING; length: INTEGER): STRING;
         PROCEDURE doMakeInit*(type: Types.PStorageType; dimensions: STRING; length: INTEGER): STRING;
         PROCEDURE doMakeType*(elementsType: Types.PStorageType; init: STRING; length: INTEGER): Types.PStorageType;
         PROCEDURE doMakeType*(elementsType: Types.PStorageType; init: STRING; length: INTEGER): Types.PStorageType;
 
 
-        handleType: PHandleSymbolAsType;
         dimensions: POINTER TO ArrayDimensions;
         dimensions: POINTER TO ArrayDimensions;
         type: Types.PStorageType;
         type: Types.PStorageType;
     END;
     END;
@@ -35,13 +33,11 @@ TYPE
         dimensions: ARRAY * OF INTEGER;
         dimensions: ARRAY * OF INTEGER;
     END;
     END;
 
 
-    DeclarationHandle* = RECORD(HandleSymbolAsType)
-        PROCEDURE isAnonymousDeclaration*(): BOOLEAN;
+    HavingFieldsDeclaration* = RECORD(DeclarationHandle)
         PROCEDURE exportField*(name: STRING);
         PROCEDURE exportField*(name: STRING);
     END;
     END;
-    PDeclarationHandle* = POINTER TO DeclarationHandle;
 
 
-    DeclarationAndIdentHandle* = RECORD(DeclarationHandle)
+    DeclarationAndIdentHandle* = RECORD(HavingFieldsDeclaration)
         PROCEDURE handleIdentdef*(id: Context.PIdentdefInfo);
         PROCEDURE handleIdentdef*(id: Context.PIdentdefInfo);
         PROCEDURE typeName*(): STRING;
         PROCEDURE typeName*(): STRING;
     END;
     END;
@@ -82,10 +78,7 @@ TYPE
         type: Types.PStorageType;
         type: Types.PStorageType;
     END;
     END;
 
 
-    Pointer* = RECORD(DeclarationHandle)
-        PROCEDURE Pointer(parent: PDeclarationHandle);
-
-        declParent: PDeclarationHandle;
+    Pointer* = RECORD(HavingFieldsDeclaration)
     END;
     END;
 
 
     Section* = RECORD(ContextHierarchy.Node)
     Section* = RECORD(ContextHierarchy.Node)
@@ -134,11 +127,6 @@ BEGIN
     SELF.setType(ContextExpression.unwrapType(s.symbol().info()));
     SELF.setType(ContextExpression.unwrapType(s.symbol().info()));
 END;
 END;
 
 
-PROCEDURE FormalType.FormalType(parent: PHandleSymbolAsType)
-    | SUPER(parent),
-      handleType(parent);
-END;
-
 PROCEDURE FormalType.setType(type: Types.PStorageType);
 PROCEDURE FormalType.setType(type: Types.PStorageType);
 BEGIN
 BEGIN
     result <- type;
     result <- type;
@@ -146,7 +134,7 @@ BEGIN
     FOR i <- 0 TO SELF.dimensionCount - 1 DO
     FOR i <- 0 TO SELF.dimensionCount - 1 DO
         result := types.makeOpenArray(result);
         result := types.makeOpenArray(result);
     END;
     END;
-    SELF.handleType.setType(result);
+    SELF.parent()(PHandleSymbolAsType).setType(result);
 END;
 END;
 
 
 PROCEDURE FormalType.handleLiteral(s: STRING);
 PROCEDURE FormalType.handleLiteral(s: STRING);
@@ -156,11 +144,6 @@ BEGIN
     END;
     END;
 END;
 END;
 
 
-PROCEDURE Array.Array(parent: PHandleSymbolAsType)
-    | SUPER(parent),
-      handleType(parent);
-END;
-
 PROCEDURE Array.setType(elementsType: Types.PStorageType);
 PROCEDURE Array.setType(elementsType: Types.PStorageType);
 VAR
 VAR
     dimensions: STRING;
     dimensions: STRING;
@@ -211,7 +194,7 @@ END;
 
 
 PROCEDURE Array.endParse(): BOOLEAN;
 PROCEDURE Array.endParse(): BOOLEAN;
 BEGIN
 BEGIN
-    SELF.handleType.setType(SELF.type);
+    SELF.parent()(PHandleSymbolAsType).setType(SELF.type);
     RETURN TRUE;
     RETURN TRUE;
 END;
 END;
 
 
@@ -496,7 +479,7 @@ BEGIN
         END;
         END;
     END;
     END;
     
     
-    parent <- p.declParent;
+    parent <- p.parent()(PDeclarationHandle);
     IF ~parent.isAnonymousDeclaration() THEN
     IF ~parent.isAnonymousDeclaration() THEN
         name := parent.genTypeName();
         name := parent.genTypeName();
     END;
     END;
@@ -504,11 +487,6 @@ BEGIN
     parent.setType(NEW R.Pointer(name, typeId));
     parent.setType(NEW R.Pointer(name, typeId));
 END;
 END;
 
 
-PROCEDURE Pointer.Pointer(parent: PDeclarationHandle)
-    | SUPER(parent),
-      declParent(parent);
-END;
-
 PROCEDURE Pointer.handleQIdent(q: ContextHierarchy.QIdent);
 PROCEDURE Pointer.handleQIdent(q: ContextHierarchy.QIdent);
 VAR 
 VAR 
     info: Types.PId;
     info: Types.PId;