From 0eea2bd7bb5de7eaa7e9989871a3d48a93c5dae6 Mon Sep 17 00:00:00 2001 From: Baptiste Fontaine Date: Mon, 3 Feb 2014 15:27:40 +0100 Subject: [PATCH] E language with samples --- lib/linguist/languages.yml | 5 + lib/linguist/samples.json | 207 ++++++++++++++++++++++++++++++++++++- samples/E/Extends.E | 31 ++++++ samples/E/Functions.E | 21 ++++ samples/E/Guards.E | 69 +++++++++++++ samples/E/IO.E | 14 +++ samples/E/Promises.E | 9 ++ samples/E/minChat.E | 18 ++++ 8 files changed, 371 insertions(+), 3 deletions(-) create mode 100644 samples/E/Extends.E create mode 100644 samples/E/Functions.E create mode 100644 samples/E/Guards.E create mode 100644 samples/E/IO.E create mode 100644 samples/E/Promises.E create mode 100644 samples/E/minChat.E diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 302ffe14..e10c3d09 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -476,6 +476,11 @@ Dylan: color: "#3ebc27" primary_extension: .dylan +E: + type: programming + color: "#ccce35" + primary_extension: .E + Ecere Projects: type: data group: JavaScript diff --git a/lib/linguist/samples.json b/lib/linguist/samples.json index ed92145a..310a4458 100644 --- a/lib/linguist/samples.json +++ b/lib/linguist/samples.json @@ -52,6 +52,9 @@ "Ceylon": [ ".ceylon" ], + "Cirru": [ + ".cirru" + ], "Clojure": [ ".cl2", ".clj", @@ -95,6 +98,9 @@ "DM": [ ".dm" ], + "E": [ + ".E" + ], "ECL": [ ".ecl" ], @@ -535,8 +541,8 @@ ".gemrc" ] }, - "tokens_total": 445429, - "languages_total": 523, + "tokens_total": 446274, + "languages_total": 538, "tokens": { "ABAP": { "*/**": 1, @@ -12715,6 +12721,43 @@ "<=>": 1, "other.name": 1 }, + "Cirru": { + "print": 38, + "array": 14, + "int": 36, + "string": 7, + "set": 12, + "f": 3, + "block": 1, + "(": 20, + "a": 22, + "b": 7, + "c": 9, + ")": 20, + "call": 1, + "bool": 6, + "true": 1, + "false": 1, + "yes": 1, + "no": 1, + "map": 8, + "m": 3, + "float": 1, + "require": 1, + "./stdio.cr": 1, + "self": 2, + "child": 1, + "under": 2, + "parent": 1, + "get": 4, + "x": 2, + "just": 4, + "-": 4, + "code": 4, + "eval": 2, + "nothing": 1, + "container": 3 + }, "Clojure": { "(": 83, "defn": 4, @@ -16024,6 +16067,160 @@ "#undef": 1, "Undefine": 1 }, + "E": { + "def": 24, + "makeVehicle": 3, + "(": 65, + "self": 1, + ")": 64, + "{": 57, + "vehicle": 2, + "to": 27, + "milesTillEmpty": 1, + "return": 19, + "self.milesPerGallon": 1, + "*": 1, + "self.getFuelRemaining": 1, + "}": 57, + "makeCar": 4, + "var": 6, + "fuelRemaining": 4, + "car": 8, + "extends": 2, + "milesPerGallon": 2, + "getFuelRemaining": 2, + "makeJet": 1, + "jet": 3, + "println": 2, + "The": 2, + "can": 1, + "go": 1, + "car.milesTillEmpty": 1, + "miles.": 1, + "name": 4, + "x": 3, + "y": 3, + "moveTo": 1, + "newX": 2, + "newY": 2, + "getX": 1, + "getY": 1, + "setName": 1, + "newName": 2, + "getName": 1, + "sportsCar": 1, + "sportsCar.moveTo": 1, + "sportsCar.getName": 1, + "is": 1, + "at": 1, + "X": 1, + "location": 1, + "sportsCar.getX": 1, + "makeVOCPair": 1, + "brandName": 3, + "String": 1, + "near": 6, + "myTempContents": 6, + "none": 2, + "brand": 5, + "__printOn": 4, + "out": 4, + "TextWriter": 4, + "void": 5, + "out.print": 4, + "ProveAuth": 2, + "<$brandName>": 3, + "prover": 1, + "getBrand": 4, + "coerce": 2, + "specimen": 2, + "optEjector": 3, + "sealedBox": 2, + "offerContent": 1, + "CheckAuth": 2, + "checker": 3, + "template": 1, + "match": 4, + "[": 10, + "get": 2, + "authList": 2, + "any": 2, + "]": 10, + "specimenBox": 2, + "null": 1, + "if": 2, + "specimenBox.__respondsTo": 1, + "specimenBox.offerContent": 1, + "else": 1, + "for": 3, + "auth": 3, + "in": 1, + "throw.eject": 1, + "Unmatched": 1, + "authorization": 1, + "__respondsTo": 2, + "_": 3, + "true": 1, + "false": 1, + "__getAllegedType": 1, + "null.__getAllegedType": 1, + "#File": 1, + "objects": 1, + "hardwired": 1, + "files": 1, + "file1": 1, + "": 1, + "file2": 1, + "": 1, + "#Using": 2, + "a": 4, + "variable": 1, + "file": 3, + "filePath": 2, + "file3": 1, + "": 1, + "single": 1, + "character": 1, + "specify": 1, + "Windows": 1, + "drive": 1, + "file4": 1, + "": 1, + "file5": 1, + "": 1, + "file6": 1, + "": 1, + "pragma.syntax": 1, + "send": 1, + "message": 4, + "when": 2, + "friend": 4, + "<-receive(message))>": 1, + "chatUI.showMessage": 4, + "catch": 2, + "prob": 2, + "receive": 1, + "receiveFriend": 2, + "friendRcvr": 2, + "bind": 2, + "save": 1, + "file.setText": 1, + "makeURIFromObject": 1, + "chatController": 2, + "load": 1, + "getObjectFromURI": 1, + "file.getText": 1, + "<": 1, + "-": 2, + "tempVow": 2, + "#...use": 1, + "#....": 1, + "report": 1, + "problem": 1, + "finally": 1, + "#....log": 1, + "event": 1 + }, "ECL": { "#option": 1, "(": 32, @@ -47799,6 +47996,7 @@ "C#": 278, "C++": 31181, "Ceylon": 50, + "Cirru": 244, "Clojure": 510, "COBOL": 90, "CoffeeScript": 2951, @@ -47810,6 +48008,7 @@ "Dart": 74, "Diff": 16, "DM": 169, + "E": 601, "ECL": 281, "edn": 227, "Elm": 628, @@ -47941,6 +48140,7 @@ "C#": 2, "C++": 27, "Ceylon": 1, + "Cirru": 9, "Clojure": 7, "COBOL": 4, "CoffeeScript": 9, @@ -47952,6 +48152,7 @@ "Dart": 1, "Diff": 1, "DM": 1, + "E": 6, "ECL": 1, "edn": 1, "Elm": 3, @@ -48066,5 +48267,5 @@ "Xtend": 2, "YAML": 1 }, - "md5": "a46f14929a6e9e4356fda95beb035439" + "md5": "09d83474428d52300e1b368b738c226c" } \ No newline at end of file diff --git a/samples/E/Extends.E b/samples/E/Extends.E new file mode 100644 index 00000000..002a9105 --- /dev/null +++ b/samples/E/Extends.E @@ -0,0 +1,31 @@ +# from +# http://wiki.erights.org/wiki/Walnut/Ordinary_Programming/Objects_and_Functions +def makeVehicle(self) { + def vehicle { + to milesTillEmpty() { + return self.milesPerGallon() * self.getFuelRemaining() + } + } + return vehicle +} + +def makeCar() { + var fuelRemaining := 20 + def car extends makeVehicle(car) { + to milesPerGallon() {return 19} + to getFuelRemaining() {return fuelRemaining} + } + return car +} + +def makeJet() { + var fuelRemaining := 2000 + def jet extends makeVehicle(jet) { + to milesPerGallon() {return 2} + to getFuelRemaining() {return fuelRemaining} + } + return jet +} + +def car := makeCar() +println(`The car can go ${car.milesTillEmpty()} miles.`) diff --git a/samples/E/Functions.E b/samples/E/Functions.E new file mode 100644 index 00000000..086e4f7a --- /dev/null +++ b/samples/E/Functions.E @@ -0,0 +1,21 @@ +# from +# http://wiki.erights.org/wiki/Walnut/Ordinary_Programming/Objects_and_Functions +def makeCar(var name) { + var x := 0 + var y := 0 + def car { + to moveTo(newX,newY) { + x := newX + y := newY + } + to getX() {return x} + to getY() {return y} + to setName(newName) {name := newName} + to getName() {return name} + } + return car +} +# Now use the makeCar function to make a car, which we will move and print +def sportsCar := makeCar("Ferrari") +sportsCar.moveTo(10,20) +println(`The car ${sportsCar.getName()} is at X location ${sportsCar.getX()}`) diff --git a/samples/E/Guards.E b/samples/E/Guards.E new file mode 100644 index 00000000..e3e841ae --- /dev/null +++ b/samples/E/Guards.E @@ -0,0 +1,69 @@ +# from +# http://wiki.erights.org/wiki/Walnut/Advanced_Topics/Build_your_Own_Guards +def makeVOCPair(brandName :String) :near { + + var myTempContents := def none {} + + def brand { + to __printOn(out :TextWriter) :void { + out.print(brandName) + } + } + + def ProveAuth { + to __printOn(out :TextWriter) :void { + out.print(`<$brandName prover>`) + } + to getBrand() :near { return brand } + to coerce(specimen, optEjector) :near { + def sealedBox { + to getBrand() :near { return brand } + to offerContent() :void { + myTempContents := specimen + } + } + return sealedBox + } + } + def CheckAuth { + to __printOn(out :TextWriter) :void { + out.print(`<$brandName checker template>`) + } + to getBrand() :near { return brand } + match [`get`, authList :any[]] { + def checker { + to __printOn(out :TextWriter) :void { + out.print(`<$brandName checker>`) + } + to getBrand() :near { return brand } + to coerce(specimenBox, optEjector) :any { + myTempContents := null + if (specimenBox.__respondsTo("offerContent", 0)) { + # XXX Using __respondsTo/2 here is a kludge + specimenBox.offerContent() + } else { + myTempContents := specimenBox + } + for auth in authList { + if (auth == myTempContents) { + return auth + } + } + myTempContents := none + throw.eject(optEjector, + `Unmatched $brandName authorization`) + } + } + } + match [`__respondsTo`, [`get`, _]] { + true + } + match [`__respondsTo`, [_, _]] { + false + } + match [`__getAllegedType`, []] { + null.__getAllegedType() + } + } + return [ProveAuth, CheckAuth] +} diff --git a/samples/E/IO.E b/samples/E/IO.E new file mode 100644 index 00000000..e96e41ad --- /dev/null +++ b/samples/E/IO.E @@ -0,0 +1,14 @@ +# E sample from +# http://wiki.erights.org/wiki/Walnut/Ordinary_Programming/InputOutput +#File objects for hardwired files: +def file1 := +def file2 := + +#Using a variable for a file name: +def filePath := "c:\\docs\\myFile.txt" +def file3 := [filePath] + +#Using a single character to specify a Windows drive +def file4 := +def file5 := +def file6 := diff --git a/samples/E/Promises.E b/samples/E/Promises.E new file mode 100644 index 00000000..ae03c6ec --- /dev/null +++ b/samples/E/Promises.E @@ -0,0 +1,9 @@ +# E snippet from +# http://wiki.erights.org/wiki/Walnut/Distributed_Computing/Promises +when (tempVow) -> { + #...use tempVow +} catch prob { + #.... report problem +} finally { + #....log event +} diff --git a/samples/E/minChat.E b/samples/E/minChat.E new file mode 100644 index 00000000..b422a71e --- /dev/null +++ b/samples/E/minChat.E @@ -0,0 +1,18 @@ +# from +# http://wiki.erights.org/wiki/Walnut/Secure_Distributed_Computing/Auditing_minChat +pragma.syntax("0.9") +to send(message) { + when (friend<-receive(message)) -> { + chatUI.showMessage("self", message) + } catch prob {chatUI.showMessage("system", "connection lost")} +} +to receive(message) {chatUI.showMessage("friend", message)} +to receiveFriend(friendRcvr) { + bind friend := friendRcvr + chatUI.showMessage("system", "friend has arrived") +} +to save(file) {file.setText(makeURIFromObject(chatController))} +to load(file) { + bind friend := getObjectFromURI(file.getText()) + friend <- receiveFriend(chatController) +}