Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

NodeBuilder Class Reference

The NodeBuilder class is a utility class for building IR nodes. More...

#include <node_builder.h>

Inheritance diagram for NodeBuilder:

CfeNodeBuilder List of all members.

Public Methods

 NodeBuilder (SymbolTable*)
 NodeBuilder (ScopedObject*)
SuifEnvget_suif_env () const
ParameterSymbol* new_param (LString name, QualifiedType* type)
VariableSymbol* new_int_var (LString name, bool addr_taken = false)
VariableSymbol* new_var (LString name, DataType* type, bool addr_taken = false)
VariableSymbol* new_var (LString name, QualifiedType* type, bool addr_taken = false)
VariableSymbol* lookup_var (LString name, bool local_only = false)
Type* lookup_type (LString, bool local_only = false)
StructType* new_struct_type (LString)
void add_struct_field (StructType*, LString fname, QualifiedType* ftype)
IntegerType* get_int_type (void)
BooleanType* get_bool_type (void)
FloatingPointType* get_float_type (void)
IntegerType* get_char_type (void)
VoidType* get_void_type (void)
QualifiedType* get_qualified_type (DataType*)
Type* get_unqualified_type (Type* t)
 Strip away all QualifiedType layer. More...

Type* get_pointed_to_type (Type* t)
 if t is a pointer type, return its reference_type. More...

PointerType* get_pointer_type (Type* t)
StoreVariableStatement* store_var (VariableSymbol*, Expression*)
StoreStatement* store (Expression* target_addr, Expression*)
StoreStatement* store_field (Expression* group_addr, LString field_name, Expression* value)
EvalStatement* eval (Expression*)
StatementList* new_statement_list (void)
IfStatement* new_if (Expression*, Statement*, Statement*)
LoadExpression* load (Expression* addr)
LoadVariableExpression* load_var (VariableSymbol*)
LoadVariableExpression* load_var (LString)
SymbolAddressExpression* sym_addr (Symbol*)
Expression* load_field (Expression* group_addr, LString field_name)
FieldAccessExpression* field_addr (Expression* grp_addr, LString field_name)
IntConstant* int_const (IInteger)
IntConstant* int_const (int)
IntConstant* bool_const (bool)
FloatConstant* float_const (float)
Expression* cstr_const (const char*, ProcedureDefinition*)
 The expression returned has type array(char).

IntConstant* char_const (char)
BinaryExpression* binary_exp (LString op, DataType* result_type, Expression* arg1, Expression* arg2)
BinaryExpression* and_exp (Expression*, Expression*)
BinaryExpression* multiply_exp (Expression*, Expression*)
BinaryExpression* add_exp (Expression*, Expression*)
BinaryExpression* subtract_exp (Expression*, Expression*)
BinaryExpression* is_less_than_or_equal_to_exp (Expression*, Expression*)
BinaryExpression* divfloor_exp (Expression*, Expression*)
BinaryExpression* max_exp (Expression*, Expression*)
BinaryExpression* min_exp (Expression*, Expression*)
UnaryExpression* convert_exp (Expression*, DataType*)
ProcedureSymbol* lookup_proc (LString name, bool local_only = false)
ProcedureDefinition* new_proc_defn1 (LString name, DataType* return_type, ParameterSymbol* arg)
VariableSymbol* get_cstr_const_var (String s, ProcedureDefinition* p)
 Lookup or create if necessary a variable definition containint a C string.

void replace (Statement* old_stmt, Statement* new_stmt)
void replace (Expression* old_exp, Expression* new_exp)

Protected Methods

Expression* get_field_offset_exp (FieldSymbol* f)
 Create an expression for byte offset of a group field.

bool is_same_type (Type*, Type*)
 Decide if the two types are the same modular qualification.

void trash (SuifObject* )
 put into trash can only if garbage has no parent.

MultiValueBlock* new_cstr_value_block (String s)
VariableDefinition* add_variable_definition (ProcedureDefinition* p, VariableSymbol* v, ValueBlock* b)


Detailed Description

The NodeBuilder class is a utility class for building IR nodes.

The constructor takes in a SymbolTable. This symbol table represents the environment of the new IR nodes. New SymbolTableObjects will be automatically owned by this symbol table.

All lookup_ method will return a null if no matching object is found, unless otherwise stated.


Constructor & Destructor Documentation

NodeBuilder::NodeBuilder ( SymbolTable * symtab)

NodeBuilder::NodeBuilder ( ScopedObject * sobj)


Member Function Documentation

BinaryExpression * NodeBuilder::add_exp ( Expression * arg1,
Expression * arg2)

void NodeBuilder::add_struct_field ( StructType * stype,
LString fname,
QualifiedType * ftype)

VariableDefinition * NodeBuilder::add_variable_definition ( ProcedureDefinition * p,
VariableSymbol * v,
ValueBlock * b) [protected]

BinaryExpression * NodeBuilder::and_exp ( Expression * arg1,
Expression * arg2)

BinaryExpression * NodeBuilder::binary_exp ( LString op,
DataType * result_type,
Expression * arg1,
Expression * arg2)

IntConstant * NodeBuilder::bool_const ( bool v)

IntConstant * NodeBuilder::char_const ( char c)

UnaryExpression * NodeBuilder::convert_exp ( Expression * arg,
DataType * t)

Expression * NodeBuilder::cstr_const ( const char * value,
ProcedureDefinition * proc)

The expression returned has type array(char).

BinaryExpression * NodeBuilder::divfloor_exp ( Expression * arg1,
Expression * arg2)

EvalStatement * NodeBuilder::eval ( Expression * exp)

FieldAccessExpression * NodeBuilder::field_addr ( Expression * grp_addr,
LString field_name)

FloatConstant * NodeBuilder::float_const ( float v)

BooleanType * NodeBuilder::get_bool_type ( void)

IntegerType * NodeBuilder::get_char_type ( void)

VariableSymbol * NodeBuilder::get_cstr_const_var ( String s,
ProcedureDefinition * p)

Lookup or create if necessary a variable definition containint a C string.

Expression * NodeBuilder::get_field_offset_exp ( FieldSymbol * fsym) [protected]

Create an expression for byte offset of a group field.

FloatingPointType * NodeBuilder::get_float_type ( void)

IntegerType * NodeBuilder::get_int_type ( void)

Type * NodeBuilder::get_pointed_to_type ( Type * t)

if t is a pointer type, return its reference_type.

Otherwise return 0.

PointerType * NodeBuilder::get_pointer_type ( Type * t)

QualifiedType * NodeBuilder::get_qualified_type ( DataType * basetype)

SuifEnv * NodeBuilder::get_suif_env () const

Type * NodeBuilder::get_unqualified_type ( Type * t)

Strip away all QualifiedType layer.

If t is not a QualifiedType, return t;

VoidType * NodeBuilder::get_void_type ( void)

IntConstant * NodeBuilder::int_const ( int i)

IntConstant * NodeBuilder::int_const ( IInteger c)

BinaryExpression * NodeBuilder::is_less_than_or_equal_to_exp ( Expression * arg1,
Expression * arg2)

bool NodeBuilder::is_same_type ( Type * t1,
Type * t2) [protected]

Decide if the two types are the same modular qualification.

LoadExpression * NodeBuilder::load ( Expression * addr)

Expression * NodeBuilder::load_field ( Expression * grp_addr,
LString field_name)

LoadVariableExpression * NodeBuilder::load_var ( LString vname)

LoadVariableExpression * NodeBuilder::load_var ( VariableSymbol * var)

ProcedureSymbol * NodeBuilder::lookup_proc ( LString name,
bool local_only = false)

Type * NodeBuilder::lookup_type ( LString name,
bool local_only = false)

VariableSymbol * NodeBuilder::lookup_var ( LString name,
bool local_only = false)

BinaryExpression * NodeBuilder::max_exp ( Expression * arg1,
Expression * arg2)

BinaryExpression * NodeBuilder::min_exp ( Expression * arg1,
Expression * arg2)

BinaryExpression * NodeBuilder::multiply_exp ( Expression * arg1,
Expression * arg2)

MultiValueBlock * NodeBuilder::new_cstr_value_block ( String s) [protected]

IfStatement * NodeBuilder::new_if ( Expression * pred,
Statement * then_part,
Statement * else_part)

VariableSymbol * NodeBuilder::new_int_var ( LString name,
bool addr_taken = false)

ParameterSymbol * NodeBuilder::new_param ( LString name,
QualifiedType * type)

ProcedureDefinition * NodeBuilder::new_proc_defn1 ( LString name,
DataType * return_type,
ParameterSymbol * arg)

StatementList * NodeBuilder::new_statement_list ( void)

StructType * NodeBuilder::new_struct_type ( LString name)

VariableSymbol * NodeBuilder::new_var ( LString name,
QualifiedType * qtype,
bool addr_taken = false)

VariableSymbol * NodeBuilder::new_var ( LString name,
DataType * dtype,
bool addr_taken = false)

void NodeBuilder::replace ( Expression * old_exp,
Expression * new_exp)

void NodeBuilder::replace ( Statement * oldstmt,
Statement * newstmt)

StoreStatement * NodeBuilder::store ( Expression * dst_addr,
Expression * src_addr)

StoreStatement * NodeBuilder::store_field ( Expression * group_addr,
LString field_name,
Expression * value)

StoreVariableStatement * NodeBuilder::store_var ( VariableSymbol * dst,
Expression * src)

BinaryExpression * NodeBuilder::subtract_exp ( Expression * arg1,
Expression * arg2)

SymbolAddressExpression * NodeBuilder::sym_addr ( Symbol * sym)

void NodeBuilder::trash ( SuifObject * garbage) [protected]

put into trash can only if garbage has no parent.


The documentation for this class was generated from the following files:
Generated at Mon Jul 31 13:44:09 2000 for NCI SUIF by doxygen 1.1.2 written by Dimitri van Heesch, © 1997-2000