Bläddra i källkod

method calling

Vladislav Folts 11 år sedan
förälder
incheckning
38f5cba533
2 ändrade filer med 16 tillägg och 2 borttagningar
  1. 6 2
      src/eberon/eberon_context.js
  2. 10 0
      test/test_unit_eberon.js

+ 6 - 2
src/eberon/eberon_context.js

@@ -4,16 +4,20 @@ var Cast = require("cast.js");
 var Context = require("context.js");
 var Errors = require("js/Errors.js");
 var Symbol = require("symbol.js");
+var Procedure = require("procedure.js");
 var Type = require("type.js");
 
 var MethodType = Type.Procedure.extend({
-    init: function(type){
+    init: function EberonContext$MethodType(type){
         Type.Procedure.prototype.init.call(this);
         this.__type = type;
     },
     args: function(){return this.__type.args();},
     result: function(){return this.__type.result();},
-    description: function(){return this.__type.description();}
+    description: function(){return this.__type.description();},
+    callGenerator: function(context, id){
+        return new Procedure.CallGenerator(context, id, this);
+    }
 });
 
 var ProcOrMethodId = Context.Chained.extend({

+ 10 - 0
test/test_unit_eberon.js

@@ -54,5 +54,15 @@ exports.suite = {
             "TYPE T = RECORD i: INTEGER END;"),
     pass("PROCEDURE T.p(), NEW; BEGIN SELF.i := 0; END T.p;"),
     fail()
+    ),
+"method call": testWithContext(
+    context(grammar.expression,
+              "TYPE T = RECORD END;"
+            + "VAR o: T;"
+            + "PROCEDURE T.p(), NEW; END T.p;"
+            + "PROCEDURE T.f(): INTEGER, NEW; RETURN 0 END T.f;"
+            ),
+    pass("o.f()"),
+    fail(["o.p()", "procedure returning no result cannot be used in an expression"])
     )
 };