view trunk/src/dil/semantic/Interpreter.d @ 691:276e2866f5fd

Added static interpret() method to Interpreter.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Tue, 22 Jan 2008 18:05:37 +0100
parents f14cd41fc87d
children 56100b270897
line wrap: on
line source

/++
  Author: Aziz Köksal
  License: GPL3
+/
module dil.semantic.Interpreter;

import dil.ast.Visitor;
import dil.ast.Node,
       dil.ast.Declarations,
       dil.ast.Expressions,
       dil.ast.Statements,
       dil.ast.Types,
       dil.ast.Parameters;

import dil.semantic.Symbol,
       dil.semantic.Symbols,
       dil.semantic.Scope,
       dil.semantic.Types;
import dil.Information;

class Interpreter : Visitor
{
  Scope scop;
  InfoManager infoMan;

  static class Result : Expression
  {
  }

  static const Result CantInterpret;

  static this()
  {
    CantInterpret = new Result;
    CantInterpret.type = Types.Error;
  }

  static Expression interpret(Expression e, InfoManager infoMan, Scope scop)
  {
    return (new Interpreter(scop, infoMan)).start(e);
  }

  this(Scope scop, InfoManager infoMan)
  {
    this.scop = scop;
    this.infoMan = infoMan;
  }

  /// Start interpretation.
  Expression start(Expression e)
  {
    return e;
  }

  bool isImmutable(Expression e)
  {
    switch (e.kind)
    {
    alias NodeKind NK;
    case NK.IntExpression, NK.RealExpression,
         NK.ComplexExpression, NK.CharExpression,
         NK.BoolExpression, NK.StringExpression:
      return true;
    default:
      return false;
    }
  }
}