2
0
Vladislav Folts 9 жил өмнө
parent
commit
05a4ee31a1

BIN
bin/compiled.zip


+ 2 - 2
build.py

@@ -129,8 +129,8 @@ def recompile(bin):
     compiler = os.path.join(root, 'src', 'oc_nodejs.js')
     compiler = os.path.join(root, 'src', 'oc_nodejs.js')
     sources = ['ContextAssignment.ob', 'ContextCase.ob', 'ContextConst.ob', 
     sources = ['ContextAssignment.ob', 'ContextCase.ob', 'ContextConst.ob', 
                'ContextIdentdef.ob', 'ContextLoop.ob', 'ContextModule.ob', 'ContextProcedure.ob', 
                'ContextIdentdef.ob', 'ContextLoop.ob', 'ContextModule.ob', 'ContextProcedure.ob', 
-               'ContextVar.ob', 'EberonSymbols.ob', 'EberonCast.ob', 
-               'EberonContextExpression.ob', 'EberonContextIdentdef.ob', 'EberonContextInPlace.ob', 'EberonContextLoop.ob', 'EberonContextType.ob', 'EberonOperatorScopes.ob',
+               'EberonSymbols.ob', 'EberonCast.ob', 
+               'EberonContextExpression.ob', 'EberonContextIdentdef.ob', 'EberonContextInPlace.ob', 'EberonContextLoop.ob', 'EberonContextType.ob', 'EberonContextVar.ob', 'EberonOperatorScopes.ob',
                'OberonContext.ob', 'OberonContextType.ob', 'OberonContextVar.ob',
                'OberonContext.ob', 'OberonContextType.ob', 'OberonContextVar.ob',
                'OberonSymbols.ob', 'Lexer.ob', 'Module.ob']
                'OberonSymbols.ob', 'Lexer.ob', 'Module.ob']
     
     

+ 10 - 1
src/eberon/EberonContext.ob

@@ -1,6 +1,6 @@
 MODULE EberonContext;
 MODULE EberonContext;
 IMPORT 
 IMPORT 
-    Context, Errors;
+    Context, ContextConst, ContextVar, Errors;
 TYPE
 TYPE
     IdentdefInfo* = RECORD(Context.IdentdefInfo)
     IdentdefInfo* = RECORD(Context.IdentdefInfo)
         PROCEDURE IdentdefInfo*(id: STRING; exported: BOOLEAN; ro: BOOLEAN);
         PROCEDURE IdentdefInfo*(id: STRING; exported: BOOLEAN; ro: BOOLEAN);
@@ -11,6 +11,9 @@ TYPE
     END;
     END;
     PIdentdefInfo* = POINTER TO IdentdefInfo;
     PIdentdefInfo* = POINTER TO IdentdefInfo;
 
 
+    ConstDeclaration* = RECORD(ContextConst.Type)
+    END;
+
 PROCEDURE IdentdefInfo.isReadOnly(): BOOLEAN;
 PROCEDURE IdentdefInfo.isReadOnly(): BOOLEAN;
     RETURN SELF.ro;
     RETURN SELF.ro;
 END;
 END;
@@ -27,4 +30,10 @@ BEGIN
     END;
     END;
 END;
 END;
 
 
+PROCEDURE ConstDeclaration.handleIdentdef(id: Context.PIdentdefInfo);
+BEGIN
+    checkOrdinaryExport(id^(IdentdefInfo), "constant");
+    SUPER(id);
+END;
+
 END EberonContext.
 END EberonContext.

+ 24 - 0
src/eberon/EberonContextVar.ob

@@ -0,0 +1,24 @@
+MODULE EberonContextVar;
+IMPORT
+    Context, ContextVar, EberonContext, EberonRecord;
+TYPE
+
+    Declaration* = RECORD(ContextVar.Declaration)
+    END;
+
+PROCEDURE Declaration.handleIdentdef(id: Context.PIdentdefInfo);
+BEGIN
+    EberonContext.checkOrdinaryExport(id^(EberonContext.IdentdefInfo), "variable");
+    SUPER(id);
+END;
+
+PROCEDURE Declaration.doInitCode(): STRING;
+BEGIN
+    type <- SELF.type;
+    IF type IS EberonRecord.PRecord THEN
+        EberonRecord.ensureCanBeInstantiated(SELF, type, EberonRecord.instantiateForVar);
+    END;
+    RETURN SUPER();
+END;
+
+END EberonContextVar.

+ 0 - 28
src/eberon/eberon_context.js

@@ -52,32 +52,6 @@ var ChainedContext = ContextHierarchy.Node;
 ChainedContext.extend = Class.extend;
 ChainedContext.extend = Class.extend;
 ChainedContext.prototype.init = ContextHierarchy.Node;
 ChainedContext.prototype.init = ContextHierarchy.Node;
 
 
-var ConstDecl = Class.extend.call(ContextConst.Type, {
-    init: function EberonContext$ConstDecl(context){
-        ContextConst.Type.call(this, context);
-    },
-    handleIdentdef: function(id){
-        EberonContext.checkOrdinaryExport(id, "constant");
-        ContextConst.Type.prototype.handleIdentdef.call(this, id);
-    }
-});
-
-var VariableDeclaration = Class.extend.call(ContextVar.Declaration, {
-    init: function EberonContext$VariableDeclaration(context){
-        ContextVar.Declaration.call(this, context);
-    },
-    handleIdentdef: function(id){
-        EberonContext.checkOrdinaryExport(id, "variable");
-        ContextVar.Declaration.prototype.handleIdentdef.call(this, id);
-    },
-    doInitCode: function(){
-        var type = this.type;
-        if (type instanceof EberonRecord.Record)
-            EberonRecord.ensureCanBeInstantiated(this, type, EberonRecord.instantiateForVar);
-        return ContextVar.Declaration.prototype.doInitCode.call(this);
-    }
-});
-
 var While = Class.extend.call(ContextLoop.While, {
 var While = Class.extend.call(ContextLoop.While, {
     init: function EberonContext$While(context){
     init: function EberonContext$While(context){
         ContextLoop.While.call(this, context);
         ContextLoop.While.call(this, context);
@@ -283,7 +257,6 @@ var ModuleDeclaration = Class.extend.call(ContextModule.Declaration, {
 });
 });
 
 
 exports.CaseLabel = CaseLabel;
 exports.CaseLabel = CaseLabel;
-exports.ConstDecl = ConstDecl;
 exports.For = For;
 exports.For = For;
 exports.FormalParameters = FormalParameters;
 exports.FormalParameters = FormalParameters;
 exports.FormalParametersProcDecl = FormalParametersProcDecl;
 exports.FormalParametersProcDecl = FormalParametersProcDecl;
@@ -292,5 +265,4 @@ exports.If = If;
 exports.ModuleDeclaration = ModuleDeclaration;
 exports.ModuleDeclaration = ModuleDeclaration;
 exports.MapDecl = MapDecl;
 exports.MapDecl = MapDecl;
 exports.Repeat = Repeat;
 exports.Repeat = Repeat;
-exports.VariableDeclaration = VariableDeclaration;
 exports.While = While;
 exports.While = While;

+ 4 - 2
src/eberon/eberon_grammar.js

@@ -5,6 +5,7 @@ var EbArray = require("js/EberonArray.js");
 var CodeGenerator = require("js/CodeGenerator.js");
 var CodeGenerator = require("js/CodeGenerator.js");
 var ContextType = require("js/ContextType.js");
 var ContextType = require("js/ContextType.js");
 var EbContext = require("eberon/eberon_context.js");
 var EbContext = require("eberon/eberon_context.js");
+var EberonContext = require("js/EberonContext.js");
 var EberonContextDesignator = require("js/EberonContextDesignator.js");
 var EberonContextDesignator = require("js/EberonContextDesignator.js");
 var EberonContextExpression = require("js/EberonContextExpression.js");
 var EberonContextExpression = require("js/EberonContextExpression.js");
 var EberonContextIdentdef = require("js/EberonContextIdentdef.js");
 var EberonContextIdentdef = require("js/EberonContextIdentdef.js");
@@ -12,6 +13,7 @@ var EberonContextInPlace = require("js/EberonContextInPlace.js");
 var EberonContextLoop = require("js/EberonContextLoop.js");
 var EberonContextLoop = require("js/EberonContextLoop.js");
 var EberonContextProcedure = require("js/EberonContextProcedure.js");
 var EberonContextProcedure = require("js/EberonContextProcedure.js");
 var EberonContextType = require("js/EberonContextType.js");
 var EberonContextType = require("js/EberonContextType.js");
+var EberonContextVar = require("js/EberonContextVar.js");
 var Grammar = require("grammar.js");
 var Grammar = require("grammar.js");
 var EbRtl = require("js/EberonRtl.js");
 var EbRtl = require("js/EberonRtl.js");
 var EbRtlCode = require("eberon/eberon_rtl.js");
 var EbRtlCode = require("eberon/eberon_rtl.js");
@@ -145,10 +147,10 @@ exports.language = {
         makeFormalResult,
         makeFormalResult,
         makeReturn,
         makeReturn,
         { 
         { 
-            constDeclaration:   EbContext.ConstDecl, 
+            constDeclaration:   EberonContext.ConstDeclaration, 
             typeDeclaration:    EberonContextType.Declaration,
             typeDeclaration:    EberonContextType.Declaration,
             recordDecl:         EberonContextType.Record,
             recordDecl:         EberonContextType.Record,
-            variableDeclaration: EbContext.VariableDeclaration,
+            variableDeclaration: EberonContextVar.Declaration,
             ArrayDecl:          EberonContextType.Array,
             ArrayDecl:          EberonContextType.Array,
             Factor:             EberonContextExpression.Factor,
             Factor:             EberonContextExpression.Factor,
             FormalParameters:   EbContext.FormalParameters,
             FormalParameters:   EbContext.FormalParameters,

+ 1 - 1
src/ob/ContextConst.ob

@@ -4,7 +4,7 @@ IMPORT
     Errors, Expression, Symbols, Types;
     Errors, Expression, Symbols, Types;
 TYPE
 TYPE
     Type* = RECORD(ContextExpression.ExpressionHandler)
     Type* = RECORD(ContextExpression.ExpressionHandler)
-        PROCEDURE handleIdentdef(id: Context.PIdentdefInfo);
+        PROCEDURE handleIdentdef*(id: Context.PIdentdefInfo);
 
 
         id: Context.PIdentdefInfo;
         id: Context.PIdentdefInfo;
         type: Types.PType;
         type: Types.PType;

+ 1 - 1
src/ob/ContextVar.ob

@@ -4,7 +4,7 @@ IMPORT
     Object, Symbols, Types, Variable;
     Object, Symbols, Types, Variable;
 TYPE
 TYPE
     Declaration* = RECORD(ContextType.DeclarationAndIdentHandle)
     Declaration* = RECORD(ContextType.DeclarationAndIdentHandle)
-        PROCEDURE doInitCode(): STRING;
+        PROCEDURE doInitCode*(): STRING;
         PROCEDURE doCheckExport*(name: STRING);
         PROCEDURE doCheckExport*(name: STRING);
 
 
         idents: ARRAY * OF Context.PIdentdefInfo;
         idents: ARRAY * OF Context.PIdentdefInfo;