Affe update

Lately I’ve taken to hacking Affe quite a bit. Just a quick list of a few changes: Value types can now be the target of invocations. A value type will be automatically boxed when being cast to an interface that it implements. Any object type can now be unboxed. This fixes the case where a…

Late-bound invocation in Affe

I have finished removing Lua from Kaffeeklatsch and have enhanced Affe with the ability to bind field, property, and method calls at runtime. I noticed this gap when rewriting some of the key binding scripts; where I could just set a field before, my compiler threw an exception since it could not find the field…

Kaffeeklatsch teaser

I got Kaffeeklatsch back out of the toy box the other day and started integrating the Affe compiler into it. The goal is to remove Lua entirely, as it’s an unmanaged dependency and has been giving some odd errors as of late, crashing mono after a few seconds. The SuperScope effect has been completely converted…

I’m running out of title ideas

But not motivation to code. Since my last post, the following changes have been made to Affe: The AffeCompiler class has been split into two classes. AffeCompiler stores information about the configuration (host type and symbol table) and passes copies to AffeCompilerState for actual compilation. This allows the host class information to be cached when…

CategoriesC#

More Affe hackery

Today I added: Variable persistence. If a field of type ScriptState is tagged [AffeBound] on the host class, it will be used to store the state of all of the variables local to the script. If no such field is found, no state preserving IL will be emitted. Bound methods can now return anything, but…

CategoriesC#

Affe evolves (Get it? It’s a pun.)

Well, the plan was to have Affe be a simple language. I guess it still is, but I’ve been adding support for many C-style language features and tweaking other features over the past day. Specifically, the following: Added if/else support, with the same nesting rules as C. Added the following operators: ! (boolean not) ==…

CategoriesC#

Affe

Introducing my new CLI language, Affe. While not exactly flexible, the language will be useful to me. Since the goal was to have an expression-evaluating language that targets DynamicMethod instead of Assembly, it’s not used the same way most other languages are. It cannot be used to define subroutines or manipulate objects. In fact the…

CategoriesC#

Mono and compilers

Just two quick notes. I implemented a missing feature in Mono and two people were offering a bounty for it. Who knew that hacking Mono as a hobby would help pay my car insurance? 🙂 Over the past week or so I’ve been reading the Red Dragon Book with the specific goal of writing a…

CategoriesC#