コード例 #1
0
ファイル: TermExpression.cs プロジェクト: strunberg/TEA
 public TermExpression(
     Token start,
     Expression left,
     Keyword oper,
     Expression right)
     : base(start)
 {
     this.Left = left;
     this.Operator = oper;
     this.Right = right;
 }
コード例 #2
0
ファイル: VarBlock.cs プロジェクト: strunberg/TEA
 public VariableDeclaration(
     Token start, 
     IEnumerable<string> variableNames, 
     TypeReference type,
     Expression initExpression)
     : base(start)
 {
     this.type = type;
     this.variableNames.AddRange(variableNames);
     this.InitExpression = initExpression;
 }
コード例 #3
0
ファイル: ClassDeclaration.cs プロジェクト: strunberg/TEA
 public ClassDeclaration(
     Token start, 
     string name, 
     string baseType,
     bool isStatic, 
     bool isPublic)
     : base(start, name)
 {
     this.IsPublic = isPublic;
     this.IsStatic = isStatic;
     this.BaseType = baseType;
 }
コード例 #4
0
ファイル: MethodDeclaration.cs プロジェクト: strunberg/TEA
 public MethodDeclaration(
     Token start, 
     string name, 
     bool isStatic, 
     bool isVirtual,
     bool isAbstract)
     : base(start)
 {
     this.MethodName = name;
     this.IsStatic = isStatic;
     this.IsVirtual = isVirtual;
     this.IsAbstract = isAbstract;
 }
コード例 #5
0
ファイル: CodeGenerator.cs プロジェクト: strunberg/TEA
        private bool TryEmitAllocCall(Token start, CompilerContext context, Scope scope, MethodImpl method, int size)
        {
            TypeDefinition memoryType = null;
            if (!this.TryFindSystemMemory(start, context, out memoryType))
            {
                return false;
            }

            MethodInfo allocMethod = memoryType.Methods.FirstOrDefault(e => string.CompareOrdinal("Alloc", e.Name) == 0);
            if (allocMethod == null)
            {
                log.Write(new Message(
                    start.Path,
                    start.Line,
                    start.Column,
                    Severity.Error,
                    Properties.Resources.CodeGenerator_SystemMemoryMissingAlloc));
                return false;
            }

            method.Module.AddProto(allocMethod);
            method.Statements.Add(new AsmStatement { Instruction = "mov eax," + size.ToString() });
            method.Statements.Add(new AsmStatement { Instruction = "push eax" });
            method.Statements.Add(new AsmStatement { Instruction = "call " + allocMethod.MangledName });
            method.Statements.Add(new AsmStatement { Instruction = "add esp,4" });
            return true;
        }
コード例 #6
0
ファイル: NewExpression.cs プロジェクト: strunberg/TEA
 public NewExpression(Token start, TypeReference typeReference, IEnumerable<Expression> constructorArguments)
     : base(start)
 {
     this.typeReference = typeReference;
     this.constructorArguments.AddRange(constructorArguments);
 }
コード例 #7
0
ファイル: CodeGenerator.cs プロジェクト: strunberg/TEA
        private bool TryFindSystemMemory(Token start, CompilerContext context, out TypeDefinition memoryType)
        {
            if (!context.TryFindTypeByName("System.Memory", out memoryType))
            {
                log.Write(new Message(
                    start.Path,
                    start.Line,
                    start.Column,
                    Severity.Error,
                    Properties.Resources.CodeGenerator_SystemMemoryNotDeclared));
                return false;
            }

            return true;
        }
コード例 #8
0
ファイル: ParseNode.cs プロジェクト: strunberg/TEA
 protected ParseNode(Token start)
 {
     this.start = start;
 }
コード例 #9
0
ファイル: BlockStatement.cs プロジェクト: strunberg/TEA
 public BlockStatement(Token start)
     : base(start)
 {
 }
コード例 #10
0
ファイル: TypeReference.cs プロジェクト: strunberg/TEA
 public PointerTypeReference(Token start, TypeReference elementType)
     : base(start)
 {
     this.ElementType = elementType;
 }
コード例 #11
0
ファイル: ParameterDeclaration.cs プロジェクト: strunberg/TEA
 public ParameterDeclaration(Token start, IEnumerable<string> parameterNames, TypeReference type)
     : base(start)
 {
     this.type = type;
     this.parameterNames.AddRange(parameterNames);
 }
コード例 #12
0
ファイル: WhileStatement.cs プロジェクト: strunberg/TEA
 public WhileStatement(Token start)
     : base(start)
 {
 }
コード例 #13
0
ファイル: TypeReference.cs プロジェクト: strunberg/TEA
 public ArrayTypeReference(Token start, Expression elementCount, TypeReference elementType)
     : base(start)
 {
     this.ElementCount = elementCount;
     this.ElementType = elementType;
 }
コード例 #14
0
ファイル: ReferenceExpression.cs プロジェクト: strunberg/TEA
 protected ReferenceExpression(Token start)
     : base(start)
 {
 }
コード例 #15
0
ファイル: CodeGenerator.cs プロジェクト: strunberg/TEA
        private bool TryEmitFreeCall(Token start, CompilerContext context, Scope scope, MethodImpl method)
        {
            TypeDefinition memoryType = null;
            if (!this.TryFindSystemMemory(start, context, out memoryType))
            {
                return false;
            }

            MethodInfo freeMethod = memoryType.Methods.FirstOrDefault(e => string.CompareOrdinal(e.Name, "Free") == 0);
            if (freeMethod == null)
            {
                log.Write(new Message(
                    start.Path,
                    start.Line,
                    start.Column,
                    Severity.Error,
                    Properties.Resources.CodeGenerator_SystemMemoryMissingFree));
                return false;
            }

            method.Module.AddProto(freeMethod);
            method.Statements.Add(new AsmStatement { Instruction = string.Format("call {0}", freeMethod.MangledName) });
            return true;
        }
コード例 #16
0
ファイル: ReferenceExpression.cs プロジェクト: strunberg/TEA
 public NamedReferenceExpression(Token start, string identifier)
     : base(start)
 {
     this.Identifier = identifier;
 }
コード例 #17
0
ファイル: ReferenceExpression.cs プロジェクト: strunberg/TEA
 public MemberReferenceExpression(Token start, ReferenceExpression inner, string memberName)
     : base(start)
 {
     this.MemberName = memberName;
     this.Inner = inner;
 }
コード例 #18
0
ファイル: ReferenceExpression.cs プロジェクト: strunberg/TEA
 public ArrayIndexReferenceExpression(Token start, ReferenceExpression inner, Expression index)
     : base(start)
 {
     this.Inner = inner;
     this.Index = index;
 }
コード例 #19
0
ファイル: ReferenceExpression.cs プロジェクト: strunberg/TEA
 public InheritedReferenceExpression(Token start)
     : base(start)
 {
 }
コード例 #20
0
ファイル: AssignmentStatement.cs プロジェクト: strunberg/TEA
 public AssignmentStatement(Token start, ReferenceExpression storage, Expression value)
     : base(start)
 {
     this.Value = value;
     this.Storage = storage;
 }
コード例 #21
0
ファイル: AddressExpression.cs プロジェクト: strunberg/TEA
 public AddressExpression(Token start, ReferenceExpression inner)
     : base(start)
 {
     this.Inner = inner;
 }
コード例 #22
0
ファイル: IfStatement.cs プロジェクト: strunberg/TEA
 public IfStatement(Token start)
     : base(start)
 {
 }
コード例 #23
0
ファイル: Expression.cs プロジェクト: strunberg/TEA
 protected Expression(Token start)
     : base(start)
 {
 }
コード例 #24
0
ファイル: TypeDeclaration.cs プロジェクト: strunberg/TEA
 protected TypeDeclaration(Token start, string name)
     : base(start)
 {
     this.Name = name;
 }
コード例 #25
0
ファイル: TypeReference.cs プロジェクト: strunberg/TEA
 public NamedTypeReference(Token start, string typeName)
     : base(start)
 {
     this.TypeName = typeName;
 }
コード例 #26
0
ファイル: CallStatement.cs プロジェクト: strunberg/TEA
 public CallStatement(Token start, ReferenceExpression callExpression)
     : base(start)
 {
     this.Expression = callExpression;
 }
コード例 #27
0
ファイル: TypeReference.cs プロジェクト: strunberg/TEA
 protected TypeReference(Token start)
     : base(start)
 {
 }
コード例 #28
0
ファイル: NotExpression.cs プロジェクト: strunberg/TEA
 public NotExpression(Token start, Expression inner)
     : base(start)
 {
     this.Inner = inner;
 }
コード例 #29
0
ファイル: LiteralExpression.cs プロジェクト: strunberg/TEA
 public LiteralExpression(Token start, object value)
     : base(start)
 {
     this.Value = value;
 }
コード例 #30
0
ファイル: ProgramUnit.cs プロジェクト: strunberg/TEA
 public ProgramUnit(Token start)
     : base(start)
 {
 }