コード例 #1
0
ファイル: Parser.cs プロジェクト: strunberg/TEA
        private bool ParseAddressExpression(TokenReader reader, out Expression expression)
        {
            expression = null;
            Token tok = reader.Peek();
            if (!this.Expect(reader, Keyword.Address))
            {
                return false;
            }

            ReferenceExpression refExpr = null;
            if (!this.ParseReferenceExpression(reader, out refExpr))
            {
                return false;
            }

            expression = new AddressExpression(tok, refExpr);
            return true;
        }
コード例 #2
0
ファイル: CodeGenerator.cs プロジェクト: strunberg/TEA
        private bool TryEmitAddressExpression(
            AddressExpression addrExpr,
            CompilerContext context,
            Scope scope,
            MethodImpl method,
            out TypeDefinition valueType)
        {
            string innerLoc = null;
            TypeDefinition storageType = null;
            MethodInfo calleeMethod = null;
            if (!this.TryEmitReference(addrExpr.Inner, context, scope, method, out innerLoc, out storageType, out calleeMethod))
            {
                valueType = null;
                return false;
            }

            method.Statements.Add(new AsmStatement { Instruction = string.Format("lea eax,{0}", innerLoc) });
            valueType = context.GetPointerType(storageType);
            return true;
        }