coins.ffront
クラス HirUtility

java.lang.Object
  |
  +--coins.ffront.HirUtility

public class HirUtility
extends java.lang.Object

HIR wrapper class


フィールドの概要
(パッケージプライベート)  FirToHir fHir
           
(パッケージプライベート)  TypeUtility fTypeUtil
           
(パッケージプライベート)  HIR hir
           
(パッケージプライベート)  HirRoot hirRoot
           
(パッケージプライベート)  Sym sym
           
(パッケージプライベート)  SymRoot symRoot
           
 
コンストラクタの概要
HirUtility(FirToHir fth, HIR h)
           
 
メソッドの概要
(パッケージプライベート)  Exp castIfNeeded(Exp exp, Type type)
          return cast expression if cast is needed
(パッケージプライベート)  Exp castToInteger(Exp exp)
          cast to integer.
 Exp checkAssignExpType(Exp pExp1, Exp pExp2)
          Add type conversion node if necessary.
(パッケージプライベート)  Type checkTwoExpType(Exp arg1, Exp arg2)
          return more complex type between two exp.
 Exp convToDouble(Exp pExp)
           
(パッケージプライベート)  void dp(java.lang.String msg)
           
 Exp makeArgAddr(FStmt pCallStmt, Exp pExp)
          Make a call-by-address node from pExp.
 Stmt makeAssignStmt(Exp lExp1, Exp lExp2)
          return checked assign statement
 Exp makeBooleanExp(Exp e)
          return boolean checked exp
 Stmt makeCharacterAssignStmt(Exp e1, Exp e2, Exp l1, Exp l2)
          return character assign exp
 FortranCharacterExp makeCharsConstNode(java.lang.String lexem)
           
(パッケージプライベート)  ComplexExp makeComplexExp(Exp pExp)
          Make ComplexExp node from Exp node of _complex_struct.
(パッケージプライベート)  ComplexExp makeComplexExpByType(Exp rexp, Exp iexp, Type type)
           
(パッケージプライベート)  ComplexExp makeComplexExpFromVar(Var v)
           
 Exp makeConstDouble0Node()
           
 Exp makeConstInt0Node()
           
 Exp makeConstInt1Node()
           
 Exp makeConstReal0Node()
           
 Exp makeConstReal1Node()
           
(パッケージプライベート)  DoubleComplexExp makeDoubleComplexExp(Exp pExp)
           
 Exp makeDoubleConstNode(java.lang.String lexem)
           
 Exp makeFalseConstNode()
           
 Exp makeFloatConstNode(java.lang.String lexem)
           
 FortranCharacterExp makeFortranCharacterExp(Exp body, Exp len)
           
(パッケージプライベート)  Stmt makeIfStmt(Exp cond, Stmt thenStmt, Stmt elseStmt)
          make if statement. it's treat with 'and' 'or' like: if EXP1 and EXP2 T else F end => IF EXP1 IF EXP2 T END goto ELSE_L ELSE ELSE_L: E END if EXP1 or EXP2 T else E end => IF EXP1 THEN_L: T ELSE IF EXP2 goto THEN_L END E END
 Exp makeIntConstNode(int num)
           
 Exp makeIntConstNode(java.lang.String lexem)
           
 Exp makeLongConstNode(int num)
           
 Exp makeNullNode()
           
 Exp makeSubpExp(Subp subp)
          make subpNode to pointer of subp node SubpNode -> &(SubpNode)
 Exp makeSubpNode(java.lang.String pSubpName, int pType, IrList pParamList, int visibility)
          Make subprogram node
 Exp makeTrueConstNode()
           
(パッケージプライベート)  Exp makeTyped0Node(Type type)
           
(パッケージプライベート)  Stmt qassign(Var var, java.lang.String ident, Exp exp)
          qualified assign
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

fHir

FirToHir fHir

fTypeUtil

TypeUtility fTypeUtil

sym

Sym sym

hir

HIR hir

symRoot

SymRoot symRoot

hirRoot

HirRoot hirRoot
コンストラクタの詳細

HirUtility

public HirUtility(FirToHir fth,
                  HIR h)
メソッドの詳細

makeArgAddr

public Exp makeArgAddr(FStmt pCallStmt,
                       Exp pExp)
Make a call-by-address node from pExp. Make a dummy variable v, and assignment node v = pExp. Then return a node of address of v.

パラメータ:
pCallStmt -
pExp -
戻り値:
call-by-address node.

makeDoubleComplexExp

DoubleComplexExp makeDoubleComplexExp(Exp pExp)

makeComplexExp

ComplexExp makeComplexExp(Exp pExp)
Make ComplexExp node from Exp node of _complex_struct. typedef struct { float _real; float _imag; } _complex_struct;

パラメータ:
pExp - Exp node of _complex_struct
戻り値:
complex exp node.

makeComplexExpByType

ComplexExp makeComplexExpByType(Exp rexp,
                                Exp iexp,
                                Type type)

makeComplexExpFromVar

ComplexExp makeComplexExpFromVar(Var v)

makeNullNode

public Exp makeNullNode()

makeConstInt1Node

public Exp makeConstInt1Node()

makeConstInt0Node

public Exp makeConstInt0Node()

makeConstReal0Node

public Exp makeConstReal0Node()

makeConstDouble0Node

public Exp makeConstDouble0Node()

makeConstReal1Node

public Exp makeConstReal1Node()

makeIntConstNode

public Exp makeIntConstNode(java.lang.String lexem)

makeIntConstNode

public Exp makeIntConstNode(int num)

makeLongConstNode

public Exp makeLongConstNode(int num)

makeFloatConstNode

public Exp makeFloatConstNode(java.lang.String lexem)

makeDoubleConstNode

public Exp makeDoubleConstNode(java.lang.String lexem)

makeTrueConstNode

public Exp makeTrueConstNode()

makeFalseConstNode

public Exp makeFalseConstNode()

makeCharsConstNode

public FortranCharacterExp makeCharsConstNode(java.lang.String lexem)

makeFortranCharacterExp

public FortranCharacterExp makeFortranCharacterExp(Exp body,
                                                   Exp len)

checkAssignExpType

public Exp checkAssignExpType(Exp pExp1,
                              Exp pExp2)
Add type conversion node if necessary. Convert pExp2 to type of pExp1.

パラメータ:
pExp1 -
pExp2 -
戻り値:
type-converted node.

makeAssignStmt

public Stmt makeAssignStmt(Exp lExp1,
                           Exp lExp2)
return checked assign statement


makeBooleanExp

public Exp makeBooleanExp(Exp e)
return boolean checked exp


makeCharacterAssignStmt

public Stmt makeCharacterAssignStmt(Exp e1,
                                    Exp e2,
                                    Exp l1,
                                    Exp l2)
return character assign exp


makeSubpNode

public Exp makeSubpNode(java.lang.String pSubpName,
                        int pType,
                        IrList pParamList,
                        int visibility)
Make subprogram node


makeSubpExp

public Exp makeSubpExp(Subp subp)
make subpNode to pointer of subp node SubpNode -> &(SubpNode)


convToDouble

public Exp convToDouble(Exp pExp)

qassign

Stmt qassign(Var var,
             java.lang.String ident,
             Exp exp)
qualified assign


castToInteger

Exp castToInteger(Exp exp)
cast to integer.


checkTwoExpType

Type checkTwoExpType(Exp arg1,
                     Exp arg2)
return more complex type between two exp.


castIfNeeded

Exp castIfNeeded(Exp exp,
                 Type type)
return cast expression if cast is needed


makeTyped0Node

Exp makeTyped0Node(Type type)

dp

void dp(java.lang.String msg)

makeIfStmt

Stmt makeIfStmt(Exp cond,
                Stmt thenStmt,
                Stmt elseStmt)
make if statement. it's treat with 'and' 'or' like:
    if EXP1 and EXP2
      T
    else
      F
    end
    
    =>
    IF EXP1
      IF EXP2
        T
      END
      goto ELSE_L
    ELSE
      ELSE_L:
      E
    END
    
    if EXP1 or EXP2
      T
    else
      E
    end

    =>
    IF EXP1
      THEN_L:
      T
    ELSE
      IF EXP2
        goto THEN_L
      END
      E
    END