Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Commits on Mar 25, 2015
Commits on Mar 23, 2015
Commits on Dec 8, 2014
  1. make some room

Commits on Oct 29, 2010
  1. fix example

Commits on Oct 10, 2010
  1. implemented prototype based structs, similar to self and javascript, if

    a function is not found in the struct, an attribute named proto_ is
    looked up, if the function is inside that struct it's returned.
    For example, if we do:
    the procedure in pseudocode is
    if has in Person
    	return Person.has
    else if proto_ in Peron
    	if has in Person.proto_
    		return Person.proto_.has
    		raise not_found
    	raise not_found
    a small example is available at examples/prototypes.ifn
Commits on Sep 18, 2010
  1. add print and format functions to struct, add example of struct with …

    …OO like features
    >>> P ="mariano", "guerra", "")
    <struct firstname="mariano" lastname="guerra" email=""/>
    >>> struct.print(P, true)
    <struct firstname="mariano" lastname="guerra" email=""
    show=#Fun<struct.print.1> present=#Fun<person.0.54746585>/>
    >>> struct.print(P)
    <struct firstname="mariano" lastname="guerra" email=""/>
    <struct firstname="mariano" lastname="guerra" email=""/>
  2. removed all obj examples

Commits on Aug 17, 2010
Commits on Aug 16, 2010
  1. changed the xml DSL to allow attributed be in any order and to provide

    by tag close option, first implementation of fhtml and gui modules that
    generate html based on the fxml module by providing helpers and
    a higher level library called gui that will generate html and xul
Commits on Aug 9, 2010
  1. add more examples

Commits on Jul 25, 2010
Commits on Jul 23, 2010
  1. records are declared using an attribute, example:

    @rec(record_name) -> (field_1, field_2, (field_3, defualt_for_3))
    this makes record creation equal to object creation and it doesn't need special syntax.
    it is implemented in efene.
    this makes functions the only toplevel definition known to the efene compiler, all the
    other toplevel definitions are attributes or attributes transformed by functions.
Commits on Jul 22, 2010
  1. using the new attribute handler syntax implemented objects with a nic…

    …e syntax, example:
    @obj(person) -> (firstname, lastname, mail)
    nice ;)
Commits on Jul 19, 2010
Commits on Jul 13, 2010
  1. multiple changes, keep reading:

    * removed object from the core languaje since it's not present in erlang, now can be done with meta programming, see example below.
    * allow to inject a list of ASTs at module level to ease code generation (for example accessors)
    * fixed all examples to compile with the changes
    * added support to do meta programming at module level, example:
    !$(fn_gen.build_record($line, person, [firstname, lastname, mail]))
    !$($line, request, [time, url, params]))
    that will generate code for a record called person and an object called request, the result in erlang using fnc -t erl is:
    -export([request/1, request/3]).
    -record(person, {firstname, lastname, mail}).
    -record(request, {time, url, params}).
    request(#request{time = Time, url = Url,
                     params = Params}) ->
        request(Time, Url, Params).
    request(Time, Url, Params) ->
        Obj = #request{time = Time, url = Url, params = Params},
        Wrapper = fun (Self, Request) ->
                          fun (get, time) -> Request#request.time;
                              (get, url) -> Request#request.url;
Commits on Jun 21, 2010
Commits on Jun 20, 2010
  1. added macrovars example

Commits on May 31, 2010
Commits on May 27, 2010
  1. added the for expression, another way of writting a list comprehensio…

    …n but supports multiple statements in the body
Commits on May 26, 2010
Commits on May 20, 2010
  1. fn now adds lib/ to the path, lib/ cleanup, new lib module obj.ifn to…

    … deal with objects, json serialization implented + example
Commits on May 17, 2010
  1. changed the syntax to access a record field from name.Var.field to na…

    …me.Var[field] see explanation below
    There are two reasons for this change:
    1. simetry with the set expression for records
     set: name.Var[field=new_value]
     get: name.Var[field]
    2. avoid having troubles in the future if namespaces are supported, it would be hard to
       tell the difference between a record field and a namespace
Commits on May 9, 2010
Commits on May 7, 2010
Commits on May 5, 2010
  1. removed a lot fo shift/reduce conflics, fixed an error in records int…

    …roduced with attributes.
    defining a one expression function withouth curly brackets had to be removed because it added
    a lot of conflicts in the parser.
    added more tests for lists
Something went wrong with that request. Please try again.