Пример #1
0
        public void GenerateVariableDeclaration(VariableTreeNode node)
        {
            var opcode = ".decl";

            OutLine(String.Format("    {0}{2}{1}", opcode, node.Value, _argumentPosition.Substring(opcode.Length)));
        }
        protected void GenerateLHSValue(CodeGenContext context, AbstractSyntaxTree target, VariableTreeNode variable)
        {
            if (target == null)
            {
                // An address was generated onto the stack.
                //	We need to use this address twice, as in a[i] += 4;
                //		we need to read a[i] once, and write a[i] once,
                //		from the same pointer computation
                context.GenerateInstruction("DUP");

                // and now we'll convert one of them into the value at that location
                context.GenerateInstruction("Indirection");
            }
            else if (variable != null)
            {
                context.GenerateInstruction("PUSH", variable.Value.ToString());
            }
            else
            {
                throw new AssertionFailedException("unexpected result for LHS");
            }
        }