Ruby: Simplify SLICC and Entry/TBE handling.
authorLisa Hsu <Lisa.Hsu@amd.com>
Fri, 1 Apr 2011 00:18:00 +0000 (17:18 -0700)
committerLisa Hsu <Lisa.Hsu@amd.com>
Fri, 1 Apr 2011 00:18:00 +0000 (17:18 -0700)
commitd857105b5a56bf08f00f17f62a023d8ee3bbcc14
tree0a7db41f49a1d4bab4a7770193495181d9e5a866
parent322b9ca2c5b0465db7086abdc6eadca061932575
Ruby: Simplify SLICC and Entry/TBE handling.
Before this changeset, all local variables of type Entry and TBE were considered
to be pointers, but an immediate use of said variables would not be automatically
deferenced in SLICC-generated code.  Instead, deferences occurred when such
variables were passed to functions, and were automatically dereferenced in
the bodies of the functions (e.g. the implicitly passed cache_entry).

This is a more general way to do it, which leaves in place the
assumption that parameters to functions and local variables of type AbstractCacheEntry
and TBE are always pointers, but instead of dereferencing to access member variables
on a contextual basis, the dereferencing automatically occurs on a type basis at the
moment a member is being accessed.  So, now, things you can do that you couldn't before
include:

Entry foo := getCacheEntry(address);
cache_entry.DataBlk := foo.DataBlk;

or

cache_entry.DataBlk := getCacheEntry(address).DataBlk;

or even

cache_entry.DataBlk := static_cast(Entry, pointer, cache.lookup(address)).DataBlk;
src/mem/slicc/ast/ActionDeclAST.py
src/mem/slicc/ast/FormalParamAST.py
src/mem/slicc/ast/FuncCallExprAST.py
src/mem/slicc/ast/IsValidPtrExprAST.py
src/mem/slicc/ast/MemberExprAST.py